Java组合与继承生成的类中构造函数的执行顺序

时间:2023-03-08 21:44:55

【程序实例】

 import java.util.*;

 class Meal{
Meal() {
System.out.println("Meal Constructor");
}
} class Bread{
Bread(){
System.out.println("Bread Constructor");
}
} class Cheese{
Cheese(){
System.out.println("Cheese Constructor");
}
} class Lettuce{
Lettuce(){
System.out.println("Lettuce Constructor");
}
} class Lunch extends Meal{
Lunch(){
System.out.println("Lunch Constructor");
}
} class PortableLunch extends Lunch{
PortableLunch(){
System.out.println("PortableLunch Constructor");
}
} public class ZuheJichengOrder extends PortableLunch{
private Bread b=new Bread();
private Cheese c=new Cheese();
private Lettuce l=new Lettuce();
public ZuheJichengOrder(){
System.out.println("ZuheJichengOrder Constructor");
} public static void main(String[] args){
new ZuheJichengOrder();
}
}

【运行结果】

 Meal Constructor
Lunch Constructor
PortableLunch Constructor
Bread Constructor
Cheese Constructor
Lettuce Constructor
ZuheJichengOrder Constructor

【结果分析】

从程序的执行结果可以看出,构造器的执行顺序是从根部的基类开始,一直到距离本类最近的父类,然后对本类中的数据成员进行初始化,最后执行本类的构造器的函数体。

总结:

复杂对象调用构造器的顺序为:

  (1)调用基类构造器。这个步骤会不断反复递归执行下去,首先是构造这中层次结构的根,然后是下一层导出类,等等,直到最底层的导出类;

  (2)按照声明顺序调用成员的初始化方法;

  (3)调用导出类构造器的主体。