標籤:構造方法 java繼承構造方法 父類帶參構造方法 子類構造方法 子類執行個體化
一直不知道怎麼取這個標題。。。
前兩天發現我父類中定義了一個帶參構造方法,然後子類繼承後構造方法必須先調用父類方法帶參構造方法,方法調用為super(參數,...)。
然後我就上網查,可能關鍵字沒搞對。。哈哈。。。一直沒明白,後來發現,如果父類含有不帶參構造方法,那麼子類就不需要上述操作。
那麼為什麼呢?
先說下類執行個體化的過程,也就是new一個對象的時候
首先預設啟動並執行是類中無參的構造方法(這個可能在執行個體化過程java會為每一個類自動建立的),這是java預設首先啟動並執行;
當然如果你重寫無參的了構造方法那麼預設啟動並執行就是你重寫的無參構造方法;
還有一種情況就是你唯寫了帶參的構造方法,那麼此時,執行個體化對象的時候,需要手動指定參數來運行含有對應參數的構造方法來構造對象。
例1:
package com.zero;public class Father {//年齡private int age;//僅有一個帶參數的構造方法public Father (int i){this.age = i;System.out.println("執行個體化父類 ag = " + age);}//main方法public static void main (String [] args) {//執行個體化對象時必須指定參數以運行對應的構造方法執行個體(構造)對象Father fa = new Father(40);Father fa1 = new Father(50);}}例1運行結果
執行個體化父類 ag = 40執行個體化父類 ag = 50
知道了類執行個體化過程之後討論下在繼承關係下,執行個體化子類又是怎麼樣的吧。。。。
在繼承關係下執行個體化子類的時候會先執行個體化其父類,然後再執行個體化子類。
也就是說在new一個子類的時候,其實是需要先把父類new出來的,如果父類中還有父類,那麼就會逐層進行,從最頂層的父類先執行個體化,最後才到當前的子類。
例2:
package com.zero;public class Son extends Father{private int age;//子類構造方法——必須先顯式調用父類構造方法public Son(int i) {super(i);//必須先調用父類的構造方法,然後才能寫子類構造方法的其他邏輯this.age = i - 20;System.out.println("執行個體化子類 age = " + age);}//main方法public static void main (String [] args) {//執行個體化子類SonSon so = new Son(40);Son so1 = new Son(50);}}
例2運行結果:
執行個體化父類 ag = 40執行個體化子類 age = 20執行個體化父類 ag = 50執行個體化子類 age = 30
由例2可以得出結論父類不含無參構造方法時子類構造方法必須顯式調用父類帶參構造方法,因為子類執行個體化的時候先需要執行個體化父類
當然上面說在new子類的時候需要先new父類,在例2中super(i)其實就是調用父類的public Father (int i)構造方法,即這裡就相當於new了Father對象了
public Father (int i){this.age = i;System.out.println("執行個體化父類 ag = " + age);}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
父類不含無參構造方法子類構造方法必須顯式調用