【程序實例】
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)調用導出類構造器的主體。
