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)調用導出類構造器的主體。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM