Ошеломляющий вывод в Java с помощью методов наследования и переопределения
Я наткнулся на этот кусок кода.
Я пытался угадать, каков будет результат его запуска, прежде чем делать это. Я был очень смущен, когда увидел их и нуждался в каких-то объяснениях.
Это код:
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();
}
}
Выход:
B.foo(): bar = null
B.foo(): bar = B.bar
a.bar = A.bar
B.foo(): bar = B.bar
Это почему?
Какbar = null
?Почемуa.bar = A.bar
хотя бы появиться? Я не создалA
совсем.И еслиA
появляется, почему этопосле B
?