L’affichage correct et donné ci-dessous.
Classe A ----- Classe A Classe B ----- Classe A Classe B Classe C ----- a = 1 ----- a = 2 b = 6 ----- a = 9 b = 6 c = 8
La difficulté principale réside dans l’affichage du dernier objet (de type C).
Pourquoi l’attribut b vaut-il 6 et non pas 3 ?
Réponse : à cause du masquage. En effet, si on observe la hiérarchie de classes donnée, on peut remarquer qu’un objet de type C possède en fait deux attributs b : l’un hérité de B et l’autre redéfini dans C (qui masque le premier).
Lorsque la méthode afficherVariables va être invoquée sur l’objet de type C, elle va appeler la méthode afficherVariables de la super-classe (B). Cette dernière va afficher l’attribut b de la super-classe, qui vaut 6.
Pour bien comprendre la nuance, remplacez la méthode afficherVariables de la classe C par la suivante :
public void afficherVariables() { super.afficherVariables(); System.out.println("b (masquant) = " + b); System.out.println("c = " + c); }
Ré-exécutez le programme. L’affichage devrait alors être le suivant:
Classe A ----- Classe A Classe B ----- Classe A Classe B Classe C ----- a = 1 ----- a = 2 b = 6 ----- a = 9 b = 6 b (masquant) = 3 c = 8 -----