创建一个类层次时,组成层次的类的构造函数按什么顺序被调用呢?例如,如果有一个名为为B的子类和一个名为A的超类,A的构造函数在B之前被调用还是之后调用?答案是在一个类层次中,构造函数按派生顺序,即从超类到子类的顺序被调用。还有,因为super()必须是子类构造函数的第一条执行语句,所以不管是否使用了super(),这个顺序是不变的。如果没有使用super(),那么将执行每个超类的默认或无参数的构造函数。

如:

class A {
   A(){
    System.out.println("Inside A's constructor");
  }

}

class B extends A{
   B(){
    System.out.println("Inside B's constructor");
  }

}

class C extends B{
   C(){
    System.out.println("Inside C's constructor");
  }

}

class D extends C{
   D(){
    System.out.println("Inside A's constructor");
  }

}

class CallingConstructor(){
   public static void main(Sting[] args){
     D d = new D();
   }
}