Perplexing Ausgabe in Java mit Vererbung und überschreibenden Methoden
Ich bin über dieses Stück Code gestolpert.
Ich habe versucht zu erraten, was das Ergebnis der Ausführung sein wird, bevor ich das tatsächlich tue. Ich war wirklich verwirrt, als ich sie sah und brauchte einige Erklärungen.
Dies ist der Code:
public class A {
String bar = "A.bar";
A() { foo(); }
public void foo() {
System.out.println("A.foo(): bar = " + bar);
}
}
public class B extends A {
String bar = "B.bar";
B() { foo(); }
public void foo() {
System.out.println("B.foo(): bar = " + bar);
}
}
public class C {
public static void main(String[] args) {
A a = new B();
System.out.println("a.bar = " + a.bar);
a.foo();
}
}
Die Ausgabe ist:
B.foo(): bar = null
B.foo(): bar = B.bar
a.bar = A.bar
B.foo(): bar = B.bar
Warum das
Wie istbar = null
?Warum ista.bar = A.bar
sogar erscheinen? Ich habe @ nicht instanziieA
überhauptUnd wennA
erscheint, warum ist esnac B
?