Java中含有多層繼承關係的構造方法的調用順序

基礎不牢,地動山搖。最近在看《Java編程思想》回顧JavaSE中的重點知識。會一直整理下來。接下來就要說一個含有多層繼承關係的對象的構造方法調用順序是什麼樣的。

父類的構造方法總是在子類的構造方法中被調用,而且按照繼承層次逐漸向上鏈接,來使得每個父類的構造方法都能得到調用。實際是向上鏈接到最頂層的父類之後開始調用。子類只能訪問自己的成員,不能訪問父類中的成員(父類中的成員一般都是private類型),只有父類纔有合適的權限對自己的元素進行初始化,因此,必須讓每個構造方法都能夠得到調用,否則的話無法創建完整的對象。這也正是編譯器爲什麼要強制每個子類都必須調用構造方法的原因,如果在子類的構造方法中沒有明確的調用父類的構造方法,編譯器就會默默調用默認構造方法。
然後看代碼

package com.echo.chapter8;
class Meal{
    public Meal(){
        System.out.println("Meal()");
    }
}
class Bread{
    public Bread(){
        System.out.println("Bread()");
    }
}
class Cheese{
    public Cheese(){
        System.out.println("Cheese()");
    }
}
class Lettuce{
    public Lettuce(){
        System.out.println("Lettuce()");
    }
}
class Lunch extends Meal{
    public Lunch(){
        System.out.println("Lunch()");
    }
}
class PortableLunch extends Lunch{
    public PortableLunch(){
        System.out.println("PortableLunch()");
    }
}
public class Sandwich extends PortableLunch{
    private Bread b = new Bread();
    private Cheese c = new Cheese();
    private Lettuce l = new Lettuce();
    public Sandwich(){
        System.out.println("Sandwich()");
    }

    public static void main(String[] args) {
        new Sandwich();
    }
}

結果
在這裏插入圖片描述
做個總結:
(1)當創建一個類的對象,且該類是繼承自某個父類時,會先調用父類的構造方法,這個步驟會反覆遞歸下去,首先是構造這種層次結構的根,然後是下一層導出類,直到最底層的導出類。
(2)按照聲明順序初始化成員變量
(3)調用該類的構造方法主體。

遵循這一規則,就能保證所有父類成員以及當前對象的成員對象都被初始化了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章