不,它们不相等。默认值在对象实例化时 立即 分配。当调用超类构造函数时,将在字段初始化程序中进行赋值……这意味着在某些情况下您 会
发现有所不同。样例代码:
class Superclass { public Superclass() { someMethod(); } void someMethod() {}}class Subclass extends Superclass { private int explicit = 0; private int implicit; public Subclass() { System.out.println("explicit: " + explicit); System.out.println("implicit: " + implicit); } @Override void someMethod() { explicit = 5; implicit = 5; }}public class Test { public static void main(String[] args) { new Subclass(); }}输出:
explicit: 0implicit: 5
在这里,您可以看到
explicit在
Superclass构造函数完成之后但在子类构造函数 体 执行之前,显式字段初始化将值重置为0
。的价值
implicit仍然具有多态调用中指定的值
someMethod从
Superclass构造。



