Exercice

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











comments powered by Disqus