【发布时间】:2018-01-24 15:38:01
【问题描述】:
请看这段代码:
class Sup {
int a = 8;
public void printA() {
System.out.println(a);
}
Sup() {
printA();
}
}
public class Sub extends Sup {
int a = 9;
@Override
public void printA() {
System.out.println(a);
}
Sub() {
printA();
}
public static void main(String[] args) {
Sub sub = new Sub();
}
}
结果:
控制台打印:0 9
我知道子类会先调用超类constructor
但是,为什么是0 9,而不是8 9?
【问题讨论】:
-
你确定构造函数是按照你认为的顺序调用的吗?
-
@cricket_007:当然是被调用了。您不能避免在 Java 中调用它。
-
@T.J.Crowder 你可以通过使用序列化或克隆来避免它。
-
@Flown:嗯,在这两种情况下都在某个时间点调用了超级构造函数。 :-D
-
@T.J.Crowder 就现有对象而言,您是对的。