class A {int x = 5;}
class B extends A {int x = 10;}
class D {
public static void main(String[] args){
A b0 = new B();
System.out.print(b0.x);
}
}
Ich frage mich, warum dieser Code druckt 5 statt 10.statische Instanz Variable Lookup Java
Wenn ich die folgende Stelle schreiben, die Variablen x zu Methoden konvertieren, funktioniert es mehr als ich erwarten würde, und gibt 10 aus, da zur Kompilierzeit lediglich überprüft wurde, ob der statische Typ von b0, A, eine Methode x hat und dann zur Laufzeit den dynamischen Typ B von b0 verwendet, um x auszuführen.
class A {int x() {return 5;}}
class B extends A {int x() {return 10;}}
class D {
public static void main(String[] args){
A b0 = new B();
System.out.print(b0.x());
}
}
Meine Theorie ist, dass Instanzvariablen statisch im Gegensatz zu Methoden nachgeschlagen werden, aber ich bin nicht sicher, warum das so sein würde.
Danke!