【发布时间】:2016-04-21 06:12:49
【问题描述】:
我偶然发现了这段代码。
在实际运行之前,我试图猜测运行它的结果。
当我看到他们并需要一些解释时,我真的很困惑。
这是代码:
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?
【问题讨论】:
标签: java inheritance methods constructor overriding