Supposons :
Cela est illustré dans l'exemple ci-dessous.
class A {
int n = 1;
float x;
}
class B extends A {
int n = 2;
double x;
void affiche() {
System.out.println("dans B n vaut " + n +
" et le n de la classe A vaut " + super.n);
}
}
class Masquage {
public static void main(String[]arg) {
B b = new B();
A a = b;
b.affiche();
System.out.println("a.n vaut " + a.n);
System.out.println("b.n vaut " + b.n);
}
}
Nous vous laissons chercher la réponse, qu'il est facile de détermer si on a compris que l'attribut invoqué ne dépend que du type de la référence et pas du type de l'objet référencé.
Il est dans l'ensemble déconseillé d'utiliser le masquage des attributs. Il est préférable d'utiliser des noms différents entre les attributs définis dans une classe et les attributs définis dans une sous-classe de celle-ci.
Par ailleurs, si, comme il est conseillé, tous les attributs sont privés, le masquage des attributs ne joue pas un grand rôle.
Pour accéder au programme.
© Irène Charon Télécom ParisTech 2010