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 :
le main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; } }
et le résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(""); }
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) )
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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
Partager