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

【程序实例】

 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)调用导出类构造器的主体。

 

posted @ 2016-03-24 13:58  Acode  阅读(2306)  评论(0编辑  收藏  举报
您是本站第访问量位访问者!