Exercice JAVA corrigé masquage (shadowing) et héritage

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
-----

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *