二、Java面向對象(8)_繼承思想——子類初始化過程
阿新 • • 發佈:2018-05-02
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(){ returnname; } } //魚 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)_繼承思想——子類初始化過程