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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !