Bonjour,
Je prépare actuellement ma certfication SCJP et je viens de découvrir (au cours de mes tests) que l'on pouvait overrider.... un attribut! L'objet qui override contiendra aussi bien la variable qu'il a overridé que la variable de son parent. Du coup ce n'est pas vraiment un override mais plutot une redéclartion de 2 variable avec le meme nom, l'une accessible via this.mavariable et l'autre via super.mavariable!
Voici mon code de test :
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 package com.softixia; public class Parent { protected String s2; protected final String s = "Parent"; public void sayHello() { System.out.println(this.getClass().toString()); System.out.println("Hello World!"); System.out.println("Chaine1 : "+this.s); System.out.println("Chaine2 : "+this.s2); } public Parent() { this.s2="parent"; } }
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 package com.other; import com.softixia.*; public class Enfant extends Parent { String s = "Enfant"; public void test() { sayHello(); System.out.println(this.s); } public Enfant() { this.s2="Enfant"; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 package com.other; public class SousEnfant extends Enfant { String s = "SousEnfant"; public void test2() { sayHello(); System.out.println(this.s); System.out.println(super.s); } public SousEnfant() { this.s2="SousEnfant"; } }
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 package com.softixia; import com.other.*; public class Launcher { /** * @param args */ public static void main(String[] args) { Parent p = new Parent(); p.sayHello(); Enfant e = new Enfant(); e.sayHello(); e.test(); SousEnfant se = new SousEnfant(); se.sayHello(); se.test(); se.test2(); } }Connaissiez-vous ce comportement?class com.softixia.Parent
Hello World!
Chaine1 : Parent
Chaine2 : parent
class com.other.Enfant
Hello World!
Chaine1 : Parent
Chaine2 : Enfant
class com.other.Enfant
Hello World!
Chaine1 : Parent
Chaine2 : Enfant
Enfant
class com.other.SousEnfant
Hello World!
Chaine1 : Parent
Chaine2 : SousEnfant
class com.other.SousEnfant
Hello World!
Chaine1 : Parent
Chaine2 : SousEnfant
Enfant
class com.other.SousEnfant
Hello World!
Chaine1 : Parent
Chaine2 : SousEnfant
SousEnfant
Enfant
Trouvez vous sa logique?
Depuis le SousEnfant comment accéder a la variable du parent (la classe "grandmère" quoi...)?
Partager