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