构造函数在Java中调用可覆盖的方法

时间:2016-08-16 07:42:54

标签: java constructor override

在阅读有效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()方法呢?它本身?

0 个答案:

没有答案