Bonjour à tous, voilà quelques temps que je n'atais pas passé mais je me suis dit que ce petit problème pouvait être intéressant : dans le cadre d'un projet assez dense et assez peu documenté je viens de tomber dans un cas d'héritage que je ne pensais pas possible.
De manière simplifiée ca se résume au cas de test suivant :
Dans le projet je suis certain que l'apparition de cette surcharge d'attribut n'est pas volontaire est j'aimerais comprendre les conséquences que cela peut avoir, car les quelques tests que j'ai pu réaliser me montrent certains fonctionnements mais sûrement pas l'exhaustivité des cas.
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public class TestHeritage { public static void main(String[] args) { Test2 test = new Test2(); System.out.println(test.getTest()); System.out.println(((Test1)test).getTest()); test.setTest(-1); System.out.println(((Test1)test).getTest()); ((Test1)test).setTest(-1); System.out.println(((Test1)test).getTest()); System.out.println(test.superGetTest()); System.out.println(test.superAccesDirect()); } } class Test1 { int test = 0; public int getTest(){ return test; } public void setTest(int tt){ test = tt; } } class Test2 extends Test1 { int test = 10; public int getTest(){ return 55; } public void setTest(int tt){ test = tt+100; } public int superGetTest(){ return super.getTest(); } public int superAccesDirect(){ return super.test; } }
De plus je serais intéressé par savoir quelles sont les utilisations possibles (quand c'est maitrisé) de ce genre de surcharge, car pour moi ca ne devrait pas compiler car ca génère sur mon instance 2 attributs ayant le même nom et des valorisations différentes.
Merci d'avance,
A titre indicatif, ca a été réalisé sous java 1.3 et je n'ai pas testé sous d'autres versions.
Partager