Considérons l'exemple de code suivant
class MyClass {
public String var = "base";
public void printVar() {
System.out.println(var);
}
}
class MyDerivedClass extends MyClass {
public String var = "derived";
public void printVar() {
System.out.println(var);
}
}
public class Binding {
public static void main(String[] args) {
MyClass base = new MyClass();
MyClass derived = new MyDerivedClass();
System.out.println(base.var);
System.out.println(derived.var);
base.printVar();
derived.printVar();
}
}
il donne le résultat suivant
base
base
base
derived
Les appels de méthode sont résolus au moment de l'exécution et de la bonne méthode de remplacement est appelé, comme prévu.
Les variables d'accès est plutôt résolu au moment de la compilation que j'ai appris plus tard.
Je m'attendais à une sortie en tant que
base
derived
base
derived
parce que dans la classe dérivée de la re-définition de l' var
ombres celui de la classe de base.
Pourquoi la liaison de variables qui se passe au moment de la compilation et non à l'exécution? Est-ce seulement pour des raisons de performances?