Je suis consterné de voir des étudiants se prendre la tête avec des problèmes aussi ridicules, mais enfin...
Pour
System.out.println(x.i); // Affiche 7
... cela me parait tout à fait étrange... x, si je suis bien, est déclaré de la classe B, mais il est de la classe C, i dans ces deux classes est une variable d'instance, donc c'est C qui compte, i dans C vaut -7 et non 7 ; donc je comprends pas.
Pour
System.out.println(x.m1()); // Affiche -7
Là ça va : x appelle m1 de C (on passe sur la prétendue redéfinition destinée uniquement à ce que le prof puisse faire le malin si un élève se plante), qui va chercher le i qui étant une variable d'instance est à -7.
Enfin pour
// System.out.println(x.m2()); // Ne compile pas
cela ne compile pas, bien que il existe une méthode m2 dans la classe de C est que l'objet soit de classe C, parce que la déclaration de l'objet x est de classe B qui ne contient pas de méthode m2 (vous suivez ?... sinon c'est pas grave ça ne sert absolument à rien et c'est même nuisible dans le monde professionnel). À la compilation il faut suivre les déclarations, mais à l'exécution il faut suivre les classes.
C'est de la m*** intellectuelle.
Partager