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 : 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;
	}
}
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
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 : 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
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