父類子類構造函數JAVA
㈠ java,中的子類繼承父類,子類如何調用父類的構造函數舉一個簡單的例子加註釋說明
子類無條件調用父類的無參構造函數,實例:
父類:
package com.test;
public class TestFatherClass {
private String name="abc";
TestFatherClass(){
System.out.println("1、這是父類的無參構造函數");
}
TestFatherClass(String a){
System.out.println("2、這是父類的有參構造函數");
}
}
子類:
package com.test;
public class TestChildClass extends TestFatherClass{
TestChildClass(){
System.out.println("3、這是子類的無參構造函數");
}
TestChildClass(String str){
System.out.println("4、這是子類的有參構造函數");
}
public static void main(String[] args) {
System.out.println("實例化對象時:(無參)");
TestChildClass test = new TestChildClass();
System.out.println("實例化對象時:(有參)");
TestChildClass test2 = new TestChildClass("adad");
}
}
輸出結果:
㈡ java創建父類對象可以用子類構造函數why
子類繼承父類的數據和方法,子類對象當然也屬於父類的類型,
不管父類或子類,靜態成員總是在new創建對象之前執行
子類繼承父類的構造方法的原則:一般JVM先調用子類的構造函數,
第一種情況:若子類構造函數開始沒有顯示調用父類構造函數,則自動調用父類那個無參構造函數。若已顯示調用了,則調用顯示調用的構造函數,而不再調用父類其它的構造函數。
第二種情況:在沒有顯示調用的情況下,若父類中無構造函數,則調用父類默認的構造函數。若父類中有構造函數而沒有無參的構造函數,編譯時會報錯。
多態性,是編譯引用變數時,無法確定其調用的是哪個類的方法,只能在程序運行期間,才能確定引用變數調用的具體類的方法,與創建父類和子類對象無關喲
㈢ JAVA中 子類與父類構造方法的關系 個人理解
編寫JAVA作業時在繼承的環節發現了一些錯誤,希望總結一些規律:(以下全部屬於自己歸納,可能有問題)
一句話概括就是:子類一定會調用(不是繼承)父類的構造方法!
即遵循一個原則:子類的構造一定是在父類已構造的基礎上!
這句話要分為幾種情況來理解(下面只討論父類有構造函數):
子類構造函數自動調用super() (也可以手動加上)
但如果父類只有含參數的構造方法,那麼子類必須申明一個構造方法,其中包含對super(args)的調用
一、父類含有無參構造函數
1、子類沒有構造方法或者含有無參的構造方法:
這種情況,都會默認地調用super()
2、子類含有有參數構造方法:
同樣會在首句默認調用super() //其實跟情況1類似
二、父類含有含參數的構造方法,不含無參數的構造方法:
子類沒得選擇:
子類必須申明一個構造方法(且含super的args),且方法里要首先調用super(args),否則報錯。
三、父類含 含參數的構造方法和無參的構造方法:
此時子類可以選擇性調用:
可以無構造方法:仍會默認調用super()
也可以有構造方法:其中會默認地調用super(),你也可以在開頭加上這句,如果你不希望調用父類默認的無參方法,那麼在 子類構造方法 中調用 父類含參構造方法。
上述看似情況復雜,其實基於其原則理解並不難。
綜上:java為了保持 子類的構造基於父類的構造 這一原則,子類構造時必須通過某些方式首先調用父類的構造方法,否則會報錯。