java繼承構造函數繼承
⑴ java中子類繼承父類後 子類可以有自己的構造函數么
可以。
你不寫的話,會自動生成一個無參的構造方法。
如果父類沒有無參構造方法,子類必須寫一個構造方法裡面調用父類的構造方法。
⑵ java子類可以繼承父類的構造方法嗎
一,java子類不能繼承父類的構造方法(可以調用,但不是繼承):
1、構造方法的定義是與類的名稱相同:如果子類能夠繼承父類的構造方法,那麼在子類的構造方法中就有不同於子類名稱的構造法;
2、這與構造方法的定義不符,因此子類是不能繼承父類的構造方法的;
3、以上參考資料來源:http://bbs.csdn.net/topics/360118234
二,子類繼承父類時,需要注意以下三點:
1、在子類繼承父類的時候,子類必須調用父類的構造函數;
2、在父類有默認構造函數,子類實例化時自動調用,在父類沒有默認構造函數,即無形參構造函數,子類構造函數必須通過super調用父類的構造函數;
3、在java的繼承當中子類是不可以繼承父類的構造函數,只能調用父類的構造函數。
⑶ java中,父類的構造方法不能被子類繼承,對嗎
不對。。子類默認繼承父類的構造方法 子類創建對象時默認調用自身的空構造器,並在子類構造器中隱式的調用super() 即調用父類的空構造器,如果父類重載了構造器,那麼子類必須初始化父類構造器否則編譯錯誤!
classAnimal{
privateStringname;
//重載父類構造器
Animal(Stringname){
this.name=name;
}
}
classDogextendsAnimal{
//必須加上
//Dog(Stringname){
//super(name);
//}
}
classTest{
publicstaticvoidmain(String[]args){
Animala=newDog();
//首先調用Dog空構造器Dog(){}構造器中第一句話為super()但父類已覆蓋空構造器所以
//編譯產生錯誤應添加子類構造器初始化父類構造器
//
}
}
⑷ 關於java中子類繼承父類的構造方法
java繼承中對構造函數是不繼承的,只是調用(隱式或顯式)。
舉例說明:
public class FatherClass {
public FatherClass() {
System.out.println(100);
}
public FatherClass(int age) {
System.out.println(age);
}
}
public class SonClass extends FatherClass{
public SonClass() {
}
public SonClass(int c) {
System.out.println(1234);
}
public static void main(String[] args) {
SonClass s = new SonClass(66);
}
}
編譯後執行結果如下:
分析:SonClass s = new SonClass(66);執行這句時,調用
public SonClass(int c) {
System.out.println(1234);//系統會自動先調用父類的無參構造函數(super())
}
在這個構造函數中,等價於
public SonClass(int c) {
super();//必須是第1行,否則不能編譯
System.out.println(1234);
}
所以結果是 100 1234
3.如果子類構造函數是這樣寫的
public SonClass(int c) {
super(22);//必須是第1行,否則不能編譯
//顯式調用了super後,系統就不再調用無參的super()了;
System.out.println(1234);
}
執行結果是 22
1234
總結1:構造函數不能繼承,只是調用而已。
如果父類沒有無參構造函數
創建子類時,不能編譯,除非在構造函數代碼體中第一行,必須是第一行顯式調用父類有參構造函數
如下:
SonClass (){
super(777);//顯示調用父類有參構造函數
System.out.println(66);
}
如果不顯示調用父類有參構造函數,系統會默認調用父類無參構造函數super();
但是父類中沒有無參構造函數,那它不是不能調用了。所以編譯就無法通過了。
總結2:創建有參構造函數後,系統就不再有默認無參構造函數。
如果沒有任何構造函數,系統會默認有一個無參構造函數。
⑸ 關於JAVA繼承的問題:子類無條件地繼承父類不含參數的構造函數。這句話對還是錯為什麼。
不對的,構造函數是不能繼承的。子類可以繼承父類的所有成員變數和成員方法,但不能繼承父類的構造方法。這就意味著,子類不能用「.」來操作父類的構造方法。但實際上,子類的構造方法中一定會調用父類的構造方法,不過這種調用只是為了創建子類對象進行的初始化處理。而不會創建父類對象。可以使用super()調用父類構造方法。