我有以下课程:
public abstract class AClass {
public AClass() {
aMethod();
}
abstract protected void aMethod();
}
public class SubClass extends AClass {
private int x = 5;
private static final int y = 6;
@Override
protected void aMethod() {
System.out.println("x: " + x + " | y: " + y);
}
}
public class Main {
public static void main(String[] args) {
new SubClass();
}
}
Run Code Online (Sandbox Code Playgroud)
Running Main打印以下内容:x:0 | y:6
为什么0打印x?
Dmi*_*nko 10
不良行为的原因是错误的初始化序列:
new SubClass()执行AClass构造函数AClass 构造函数调用 aMethod()aMethod()显示x(0到目前为止),y这是6因为是静态的)SubClass初始化其非静态字段,因此x变为5.为避免惊慌失措,请不要在构造函数中调用虚方法(尤其是overriden)
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |