Héritage, attributs, cast
Bonjour,
J'ai quelques interrogations sur le comportement de l'héritage avec des attributs et des cast. Etant habitué à Python, je trouve ces comportements choquants. Dans le code ci dessous, pourquoi est-ce que:
- new CC().x() renvoie BB.x et non CC.x ?
- ((BB) new DD()).x renvoie BB.x et non DD.x, alors que dans le cas de méthode, c'est bien DD.x() qui est appelé ?
Merci d'avance.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
public static class BB {
public int x = 1;
public int x() {return this.x;}
}
public static class CC extends BB {
public int x = 2;
}
public static class DD extends BB {
public int x = 3;
public int x() {return this.x;}
}
// why can't CC.x() access to CC.x ?
System.out.println(new DD().x() ); // ok: 3
System.out.println(new CC().x() ); // 1
// why are methods different from attributes when cast
System.out.println(((BB) new DD()).x() ); // ok: 3
System.out.println(((BB) new DD()).x ); // 1 ! |