【发布时间】:2017-07-19 08:03:04
【问题描述】:
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();
}
}
为什么第一个输出有 bar = null? 是因为在创建类 B 之前调用了 B.foo() 吗?如果是,那么 B.foo() 怎么会被调用? 还是因为 B.foo() 中的 bar 字段试图从 A 获取 bar 字段但无法访问?
我的问题与链接的问题不同,我不是在询问调用顺序,而是在问为什么第一个输出为空?另一个问题与字段或空变量无关。
如果 B.foo 中的 bar 变量在 A 和 B 中定义,我不明白它是如何为 null 的。
【问题讨论】:
-
请将代码粘贴为文本而不是图像。
标签: java inheritance constructor