1. 程式人生 > >二、Java面向對象(8)_繼承思想——子類初始化過程

二、Java面向對象(8)_繼承思想——子類初始化過程

AR args col color 所有 通過 子類初始化 anim turn

2018-05-01

子類初始化過程

構造器的調用遵循以下的順序:

(1):調用基類構造器。這個步驟會不斷地反復遞歸下去,首先是構造這種層次結構的根,然後是下一層導出類,等等,直到最低層的導出類。

(2):按聲明順序調用成員的初始化方法。 .
(3):調用導出類構造器的主體。(也就是文中的main方法中的內容)

這樣做的最終目的:讓方法中的所有成員變量都得到初始化。

創建子類對象之前會先創建父類對象

調用子類構造器之前,在子類構造器之前會先調用父類的構造器,默認調用的是無參構造器

如果父類不存在可以被子類調用的構造器(父類所有的狀態和行為搜用private修飾),則不存在子類。(事實上,這種情況基本不存在)

如果父類沒有提供無參的構造器,此時子類必須顯示通過super語句去調用父類帶參數的構造器。(看圖)

代碼舉例:

//動物
class Animal
{
    private String name;
    private int age;

    Animal(String name, int age){
        
        System.out.println("動物構造器");
        this.name = name;
        this.age = age;
    }
    public String getName(){
        return
name; } } // class Fish extends Animal { private String color;//顏色 Fish(String name, int age, String color){ super(name,age);//顯示調用構造器,super調用父類構造器,必須放在子類構造器第一句話。 this.color = color; //super();//隱式調用當前對象的父類的無參構造方法 } public void say(){ System.out.println(getName()
+ "," +this.color); } } //子類初始化過程 class SubClassInitDemo { public static void main(String[] args) { //創建一個魚對象 Fish f = new Fish("金魚", 5, "紅色"); f.say(); } }

輸出結果:

動物構造器

金魚,黃色

二、Java面向對象(8)_繼承思想——子類初始化過程