JAVA中子類會不會繼承父類的構造方法


聲明:剛剛接觸java不久,如果理解有錯誤或偏差望各位大佬強勢批判

java中子類能繼承父類的構造方法嗎?

父類代碼:

 1 class Father {
 2     String name ; //就不set/get了
 3     //Father類無參構造方法
 4     public Father(){
 5         System.out.println("這是Father類的無參構造方法");
 6     }
 7     //Father類有參構造方法
 8     public Father(String name) {
 9         this.name = name;
10         System.out.println("這是Father類的有參構造方法:"+this.name);
11     }
12     
13 }

子類代碼:

1 class Sun extends Father {
2 //這里java會為你提供一個默認的構造方法,但是代碼上是不會顯示出來的
3 //public Sun(){}
4 }

所以運行測試類,創建父類對象,調用無參構造方法初始化

結果:

1 public class FatherTest01 {
2     public static void main(String[] args) {
3         Father ff = new Father();
4         
5         //Sun ss = new Sun();
6     }
7 }

有以下結果:【輸出結果都用紅色字體表示】

這是Father類的無參構造方法

 

所以運行測試類,創建父類對象,調用有參構造方法初始化

Father ff = new Father("小明");

  

有以下結果:【輸出結果都用紅色字體表示】 

這是Father類的有參構造方法:小明

 

然后我們再創建子類:Sun類對象,調用無參構造方法初始化

Sun ss = new Sun();

有以下結果:【輸出結果都用紅色字體表示】 

這是Father類的無參構造方法

 

  可以見得子類對象默認調用了父類的無參構造方法,因為這時Sun類中沒有構造方法,所以java會默認提供無參構造方法,

public Sun(){

//這個構造方法中又會默認調用父類的無參構造方法,即public Father(){

System.out.println("這是Father類的無參構造方法");},因此會有以上結果

}

所以以上結果跟我們顯示創建Sun類無參構造方法的結果一樣,即:

public Sun(){

}

 

再次驗證:

將Sun類中的無參構造方法寫成這樣:

class Sun extends Father {
	//String name = "sun";
	public Sun(){
		System.out.println("這是sun類的無參構造方法");
	}
}

結果:【這里會先調用父類的構造方法,因此結果會先出現父類無參構造方法中的語句,即隱式語句:super();】

這是Father類的無參構造方法
這是sun類的無參構造方法

 

因此,構造方法是一個類獨有的方法,不會被其他類繼承,但是在子類實例化對象時候,如果子類的構造器沒有顯式的調用父類構造器,則自動調用父類的默認無參構造器,相當於默認省略了super();

假設父類只有有參構造方法,沒有無參構造方法會怎么樣呢?

class Father {
	String name ; //就不set/get了
	//Father類無參構造方法
	/*public Father(){
		System.out.println("這是Father類的無參構造方法");
	}*/
	//Father類有參構造方法
	public Father(String name) {
		this.name = name;
		System.out.println("這是Father類的有參構造方法:"+this.name);
	}
	
}

 此時運行成語,編譯器就會報錯:The constructor Father() is undefined

 

總結:

  子類實例化對象時,會先調用父類的構造方法,如果子類的構造方法沒有顯式的調用父類的構造方法,默認調用super();
子類要使用父類有參的構造方法,使用super(參數)形式,且super()必須是子類構造方法中的第一行語句。
如果父類沒有不帶參數的構造方法,且子類的構造方法中有沒有顯式的調用父類其他構造方法,則java編譯器會報錯

另外:方法是沒有繼承一說的,只有覆寫或者重載,類和類之間才能叫繼承。


備注:構造器==構造方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM