【发布时间】:2015-12-22 14:32:18
【问题描述】:
我有这段简单的代码。
abstract class X {
X() {
read();
}
private void read() {
Object obj = new Object();
readValue(obj);
}
protected abstract void readValue(Object obj);
}
class Y extends X {
Object obj = null;
Y() {
super();
}
@Override
protected void readValue(Object obj) {
this.obj = obj;
}
void printer() {
System.out.println("Object = " + obj);
}
}
class Runner {
public static void main(String[] args) {
Y y = new Y();
y.printer();
}
}
当我运行上面的代码时,对象被打印为空。 (我得到 "Object = null")
令人惊讶的是,当我删除空声明时,在 Y 类中
Object obj;
打印对象的实际值。
类似 ("Object = java.lang.Object@3cd1a2f1")
为什么会观察到这种行为? “这”指的是什么?如果我们只是声明它,任何对象都会被 null 初始化,那么为什么会出现这种异常行为呢?
【问题讨论】:
标签: java inheritance constructor overriding abstract-class