Supposons :
Cela est illustré dans l'exemple ci-dessous.
class A {
Nous vous laissons chercher la réponse, qu'il est facile
de déterminer 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é.
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);
}
}
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 2012