Exercice : Polymorphisme, surcharge et redéfinition
#
Que va afficher l’appel suivant:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
class Test {
void test(int i) {
System.out.println("Test - Integer: " + i);
}
void test(byte b) { // surcharge
System.out.println("Test - Byte: " + b);
}
}
class Test2 extends Test {
void test(int i) { // redéfinition
System.out.println("Test2 - Integer: " + i);
}
void test(short s) { // surcharge
System.out.println("Test2 - Short: " + s);
}
void test(byte b) { // redéfinition
System.out.println("Test2 - Byte: " + b);
}
}
|
Que va produire le code ci-dessous ?
1
2
3
4
5
6
7
8
9
10
|
/*
type de type de
la ref l'objet
| |
| |
v v */
Test t = new Test2();
t.test( (short)3 );
t.test( (byte)3 );
t.test( 10.0 );
|
Algorithme
#
Voici le raisonnement à appliquer pour ne jamais se tromper
- Recherche de la méthode candidate dans la classe de la référence (peut-être après une conversion implicite des arguments)
- Une fois la méthode candidate sélectionnée, recherche jusqu’à la classe de l’objet (en redescendant la hiérarchie) si la méthode a été redéfinie