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();
	}
 
}
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
Connaissiez-vous ce comportement?
Trouvez vous sa logique?
Depuis le SousEnfant comment accéder a la variable du parent (la classe "grandmère" quoi...)?