J'ai quelques problèmes avec l'exemple suivant (pour être plus précis, avec une ligne spécifique). Voici le code (question suivante par la suite):Polymorphisme Java - Exemple spécifique
public class Up
{
public void cc(Up u) {System.out.println("A");}
public void cc(Middle m) {System.out.println("B");}
}
public class Middle extends Up
{
public void cc(Up u) {System.out.println("C");}
public void cc(Down d) {System.out.println("D");}
}
public class Down extends Middle
{
public void cc(Up u) {System.out.println("E");}
public void cc(Middle m) {System.out.println("F");}
}
public class Test
{
public static void main(String... args)
{
Up uu = new Up();
Up pp = new Middle();
Down dd = new Down();
uu.cc(pp); // "A"
uu.cc(dd); // "B"
pp.cc(pp); // "C"
pp.cc(dd); // "B"
dd.cc(pp); // "E"
dd.cc(dd); // "D"
}
}
Maintenant uu.cc(pp);
et uu.cc(dd);
sont assez évidentes, car uu est une instance de Up
et pp
"ressemble à" un aswell Up
(au moment de la compilation). La méthode la plus appropriée pour dd
est cc(Middle m)
car dd
est une instance de Down
qui hérite de Middle
. Les lignes avec lesquelles j'ai le plus de problèmes sont pp.cc(dd);
et dd.cc(dd)
. Je suis vraiment un peu confus quant à la méthode qui est choisie quand et comment ces choses sont déterminées lors de la compiliation ou à l'exécution. Je serais heureux si quelqu'un pouvait m'aider à comprendre.