开课吧课堂之何时调用构造函数

125 阅读1分钟

类层次结构创建以后,组成层次结构的类的构造函数以怎样的顺序被调用?举个例子来说,给定一个名为B的子类和超类A,是A的构造函数在B的构造函数之前调用,还是情况相反?回答是在类层次结构中,构造函数以派生的次序调用,从超类到子类。

而且,尽管super( )必须是子类构造函数的第一个执行语句,无论你用到了super( )没有,这个次序不变。如果super( )没有被用到,每个超类的默认的或无参数的构造函数将执行。下面的例子阐述了何时执行构造函数:

// Demonstrate when constructors are called. 
// Create a super class. 
class A { 
 A() { 
 System.out.println("Inside A's constructor."); 
 } 
} 
// Create a subclass by extending class A. 
class B extends A { 
 B() { 
 System.out.println("Inside B's constructor."); 
 } 
} 
// Create another subclass by extending B. 
class C extends B { 
 C() { 
 System.out.println("Inside C's constructor."); 
 } 
} 
class CallingCons { 
 public static void main(String args[]) { 
 C c = new C(); 
 } 
}

该程序输出如下:

Inside A’s constructor 
Inside B’s constructor 
Inside C’s constructor

如你所见,构造函数以派生的顺序被调用。

仔细考虑,构造函数以派生的顺序执行是很有意义的。因为超类不知道任何子类的信息,任何它需要完成的初始化是与子类的初始化分离的,而且它可能是完成子类初始化的先决条件。因此,它必须最先执行。