java子類構造函數
⑴ java 子類的構造函數都必須要super();嗎
不是必須的,在構造函數中,如果第一行沒有寫super(),編譯器會自動插入.但是如果父類沒有不帶參數的構造函數,或這個函數被私有化了(用private修飾).此時你必須加入對父類的實例化構造.而this就沒有這個要求,因為它本身就進行實例化的構造.
⑵ java中子類繼承父類後 子類可以有自己的構造函數么
可以。
你不寫的話,會自動生成一個無參的構造方法。
如果父類沒有無參構造方法,子類必須寫一個構造方法裡面調用父類的構造方法。
⑶ java中構造函數和構造方法的區別
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 子類只要定義構造函數父類就一定要有構造函數嗎
Q1.java中只要調用子類的無參構造函數就要調用父類無參數的構造函數!
Q2.也不一定。
e.g 如果你子類只調用無參構造方法(沒有調用多個參數的構造方法),那麼父類的無參構造方法則可有可無,因為系統會幫你生成。
你應該知道,如果子只類定義了一個帶有參數的構造方法,那麼系統就不會幫你生成無參構造方法。父類也是如此。
⑹ JAVA中 子類與父類構造方法的關系 個人理解
編寫JAVA作業時在繼承的環節發現了一些錯誤,希望總結一些規律:(以下全部屬於自己歸納,可能有問題)
一句話概括就是:子類一定會調用(不是繼承)父類的構造方法!
即遵循一個原則:子類的構造一定是在父類已構造的基礎上!
這句話要分為幾種情況來理解(下面只討論父類有構造函數):
子類構造函數自動調用super() (也可以手動加上)
但如果父類只有含參數的構造方法,那麼子類必須申明一個構造方法,其中包含對super(args)的調用
一、父類含有無參構造函數
1、子類沒有構造方法或者含有無參的構造方法:
這種情況,都會默認地調用super()
2、子類含有有參數構造方法:
同樣會在首句默認調用super() //其實跟情況1類似
二、父類含有含參數的構造方法,不含無參數的構造方法:
子類沒得選擇:
子類必須申明一個構造方法(且含super的args),且方法里要首先調用super(args),否則報錯。
三、父類含 含參數的構造方法和無參的構造方法:
此時子類可以選擇性調用:
可以無構造方法:仍會默認調用super()
也可以有構造方法:其中會默認地調用super(),你也可以在開頭加上這句,如果你不希望調用父類默認的無參方法,那麼在 子類構造方法 中調用 父類含參構造方法。
上述看似情況復雜,其實基於其原則理解並不難。
綜上:java為了保持 子類的構造基於父類的構造 這一原則,子類構造時必須通過某些方式首先調用父類的構造方法,否則會報錯。
⑺ java子類的構造函數...
父類少了個無參構造方法。或者在子類的構造方法中改一下
fish(String n,int s){//子類fish的構造函數
super(n);
swimspeed=s;
}