Problème avec le polymorphisme
Bonjour,
je croyais avoir compris le polymorphisme (enfin pas toutes les arcanes, mais l'idée générale quoi), mais l'exemple suivant me pose problème :
2 classes :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class A
{
int f(A a)
{
return 1;
}
}
class B extends A
{
int f(A a)
{
return 2;
}
int f(B b)
{
return 3;
}
} |
le main :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
public static void main(String[] args) {
A a = new A();
A ab = new B();
B b = new B();
// Partie a
System.out.println( a.getClass() );
System.out.println( a.f(a) );
System.out.println( a.f(ab) );
System.out.println( a.f(b) );
System.out.println("");
// Partie ab
System.out.println( ab.getClass() );
System.out.println( ab.f(a) );
System.out.println( ab.f(ab) );
System.out.println( ab.f(b) );
System.out.println("");
// Partie b
System.out.println( ab.getClass() );
System.out.println( b.f(a) );
System.out.println( b.f(ab) );
System.out.println( b.f(b) );
System.out.println("");
} |
et le résultat :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
class javaapplication1.A
1
1
1
class javaapplication1.B
2
2
2
class javaapplication1.B
2
2
3 |
Le 1er lot, OK, a est une classe A donc f renvoie 1. Mais sur le second, j'ai du mal, notamment : System.out.println( ab.f(ab) )
comme on a un 2, ça veux dire qu'on considère que la méthode f est celle de la classe B, donc ab. est un objet B, mais comme on a 2 ça veux dire qu'on prend la méthode int f(A a) donc ça veux dire que ab passé en paramètre est une classe A...
j'aurais compris qu'on ai 1 : ab est A ou qu'on ait 3 : ab est B... mais qu'on ait 2, là, je comprend pas. Je sais que le polymorphisme c'est justement que ab est B et est A... mais que dans la même expression ab soit A et B, j'ai du mal
Quelqu'un aurait la gentillesse de m'expliquer ?
Merci
harf
geff