java繼承構造函數調用順序問題

有兩個類,一個Yuan繼承Yan,調用Yuan的有參的構造函數,其調用順序如何,且看代碼:

package cn.yan.teststarter.test;

public class Yan {
    private String name;
    static {
        System.out.println(8);
    }

    public Yan() {
        System.out.println(1);
    }

    public Yan(String name) {
        this.name = name;
        System.out.println(2);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package cn.yan.teststarter.test;

public class Yuan extends Yan {

    private String name;

    static {
        System.out.println(9);
    }

    public Yuan() {
        System.out.println(3);
    }
    public Yuan(String name) {
        this.name = name;
        System.out.println(4);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public static void main(String[] args) {
        new Yuan("li");
    }

最終其執行結果爲:

8
9
1
4

由此我們可以發現,調用子類的有參構造函數,會先執行其父類的無參構造函數,又因靜態代碼塊最先執行,則,執行順序分別是:

父類靜態代碼塊 -->> 子類靜態代碼塊  -->> 父類無參構造函數 -->>  子類有參構造

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