【程序实例】
1 import java.util.*; 2 3 class Meal{ 4 Meal() { 5 System.out.println("Meal Constructor"); 6 } 7 } 8 9 class Bread{ 10 Bread(){ 11 System.out.println("Bread Constructor"); 12 } 13 } 14 15 class Cheese{ 16 Cheese(){ 17 System.out.println("Cheese Constructor"); 18 } 19 } 20 21 class Lettuce{ 22 Lettuce(){ 23 System.out.println("Lettuce Constructor"); 24 } 25 } 26 27 class Lunch extends Meal{ 28 Lunch(){ 29 System.out.println("Lunch Constructor"); 30 } 31 } 32 33 class PortableLunch extends Lunch{ 34 PortableLunch(){ 35 System.out.println("PortableLunch Constructor"); 36 } 37 } 38 39 public class ZuheJichengOrder extends PortableLunch{ 40 private Bread b=new Bread(); 41 private Cheese c=new Cheese(); 42 private Lettuce l=new Lettuce(); 43 public ZuheJichengOrder(){ 44 System.out.println("ZuheJichengOrder Constructor"); 45 } 46 47 public static void main(String[] args){ 48 new ZuheJichengOrder(); 49 } 50 }
【运行结果】
1 Meal Constructor 2 Lunch Constructor 3 PortableLunch Constructor 4 Bread Constructor 5 Cheese Constructor 6 Lettuce Constructor 7 ZuheJichengOrder Constructor
【结果分析】
从程序的执行结果可以看出,构造器的执行顺序是从根部的基类开始,一直到距离本类最近的父类,然后对本类中的数据成员进行初始化,最后执行本类的构造器的函数体。
总结:
复杂对象调用构造器的顺序为:
(1)调用基类构造器。这个步骤会不断反复递归执行下去,首先是构造这中层次结构的根,然后是下一层导出类,等等,直到最底层的导出类;
(2)按照声明顺序调用成员的初始化方法;
(3)调用导出类构造器的主体。