在阅读有效Java的过程中,我对这个问题感到困惑。构造函数不能直接或间接地调用可覆盖的方法,这可以通过下面的代码片段来解释。
public class Hello {
public static void main(String[] args) {
new Sub();
}
}
class Super {
Super() {
foo();
}
void foo() {
System.out.println("Super");
}
}
class Sub extends Super {
Sub() {
foo();
}
@Override
void foo() {
System.out.println("Sub");
}
}
结果是
Sub
Sub
似乎在初始化过程中,Super和Sub都调用了Sub的foo()方法,令人困惑的是,对于Super,为什么要调用它的子进程的foo()方法呢?它本身?