A. 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");
}
}
輸出結果:
B. JAVA中 子類與父類構造方法的關系 個人理解
編寫JAVA作業時在繼承的環節發現了一些錯誤,希望總結一些規律:(以下全部屬於自己歸納,可能有問題)
一句話概括就是:子類一定會調用(不是繼承)父類的構造方法!
即遵循一個原則:子類的構造一定是在父類已構造的基礎上!
這句話要分為幾種情況來理解(下面只討論父類有構造函數):
子類構造函數自動調用super() (也可以手動加上)
但如果父類只有含參數的構造方法,那麼子類必須申明一個構造方法,其中包含對super(args)的調用
一、父類含有無參構造函數
1、子類沒有構造方法或者含有無參的構造方法:
這種情況,都會默認地調用super()
2、子類含有有參數構造方法:
同樣會在首句默認調用super() //其實跟情況1類似
二、父類含有含參數的構造方法,不含無參數的構造方法:
子類沒得選擇:
子類必須申明一個構造方法(且含super的args),且方法里要首先調用super(args),否則報錯。
三、父類含 含參數的構造方法和無參的構造方法:
此時子類可以選擇性調用:
可以無構造方法:仍會默認調用super()
也可以有構造方法:其中會默認地調用super(),你也可以在開頭加上這句,如果你不希望調用父類默認的無參方法,那麼在 子類構造方法 中調用 父類含參構造方法。
上述看似情況復雜,其實基於其原則理解並不難。
綜上:java為了保持 子類的構造基於父類的構造 這一原則,子類構造時必須通過某些方式首先調用父類的構造方法,否則會報錯。
C. Java中子類不能繼承父類的構造方法應如何理解
首先,你這句話沒有說清楚構造函數(一般我們講的「函數」就是「方法」)是默認的無參數,還是自己手動寫的有參數的。
一個類可以定義多個 構造函數,如果在定義類時你手動寫了一個有參數的構造函數,那麼當前類只有這一個有參數的構造函數。如果在定義類時沒有定義構造函數,則編譯系統會自動插入一個無參數的默認構造函數,這個構造函數不執行任何代碼,且不會顯示出來。
Java中,子類只能繼承父類的用protected 和 public修飾的構造函數。其中,無參構造函數只能是 public。另外:對super的調用必須是構造器中的第一個語句
D. 在JAVA中,子類繼承父類時,怎樣使用父類的構造函數怎樣重寫父類的構造函數
java中子類無法繼承父類構造函數,因此不能重寫父類構造函數,但是可以在子類構造函數中通過super()調用父類構造函數
E. 「java」中父類構造方法的調用怎麼操作
Father a = new Father(baba); 這跟直接調用另一個類並且實例化對象並沒多大區別把,不用繼承也能做到。調用父類的構造函數用super();關鍵字
public class Father {
public Father()
//{
//System.out.println("父類無參構造方法");
//} //不在父類中顯式聲明
public Father(String name)
{
System.out.println("父類有參構造方法");
}
}//父類
public class son extends Father {
public son()
{
super();
System.out.println("子類無參構造方法");
}//子類super();調用父類無參構造方法
public son(String name)
{
super(name);
System.out.println("子類有參構造方法");
}
}//子類
系統在Father類中默認一個無參構造函數,若不在父類中顯式的聲明,子類super();調用時提示父類的構造方法是未定義的。必須要顯式的聲明。不會調用默認的無參構造函數。用個編譯器具體編譯一下,看看到底報的什麼錯,對症下葯。
F. java中,子類調用父類函數構造函數中被重寫的方法,輸出語句為什麼是默認值
1,Java的函數調用是虛擬調用,對象名.方法名,調用的都是其真實類型的函數,就是說,對象實際上是一個dog,那麼調用的就是dog的重寫方法。父類構造器之所以被調用,是因為子類的構造器會調用父類的構造器,整個過程實際上是dog的構造。
2,這個和初始化順序有關,new對象時,會先初始化成員變數再調用構造器,所以初始化順序是:父類的成員變數->父類構造器->子類成員變數->子類構造器
也就是說,父類構造器中調用getAge的時候,dog的成員變數還沒有初始化
等到子類構造器中再調用一次的時候,已經完成初始化。
G. 在java語言里如何在子類中調用父類的有參構造函數
如果你是想在子類的構造函數中調用父類構造函數,則需要在子類的構造函數的函數體第一行(注釋語句除外)使用:super(參數列表)的方式調用,該參數列表與父類有參構造函數聲明的參數列表一致,如果你不是在子類構造函數中調用,則無法直接調用父類構造函數,這時創建一個父類對象(通過你想調用的有參父類構造函數創建),就間接調用了該構造函數。
H. java子類構造中怎麼調用父類的構造函數
先小小糾正一下,java裡面一般不叫函數,叫方法,這是Java的一個小習慣。
你這個問題原因很簡單。
首先,任何類都有構造方法,難怕是你不寫,也會默認你有一個有無參構造方法。,所以你的A裡面就會有一個叫A()的構造方法。
當你new A()時,默認你有一個有無參構造方法A()的方法里的第一句,會自動加上一個super();的方法,這句就是調用父類構造方法的意思,這是java規定的規則。
你可以嘗試一下,在A里寫一個構造方法:
A(){
super(); //這個一定要放在第一句
System.out..XX;
}
這與你不寫super()這句效果是一樣的,因如果沒寫,java會默認在第一句加上super。
I. java子類可以繼承父類的構造方法嗎
一,java子類不能繼承父類的構造方法(可以調用,但不是繼承):
1、構造方法的定義是與類的名稱相同:如果子類能夠繼承父類的構造方法,那麼在子類的構造方法中就有不同於子類名稱的構造法;
2、這與構造方法的定義不符,因此子類是不能繼承父類的構造方法的;
3、以上參考資料來源:http://bbs.csdn.net/topics/360118234
二,子類繼承父類時,需要注意以下三點:
1、在子類繼承父類的時候,子類必須調用父類的構造函數;
2、在父類有默認構造函數,子類實例化時自動調用,在父類沒有默認構造函數,即無形參構造函數,子類構造函數必須通過super調用父類的構造函數;
3、在java的繼承當中子類是不可以繼承父類的構造函數,只能調用父類的構造函數。
J. java 子類調用父類構造方法會創建父類對象嗎
調用初始化方法並不代表會生成對象,你的java代碼中出現new關鍵字加上構造方法的調用,只會生成一個對象,其父類對象不會生成,所以調用父類為抽象類的構造方法完全是合理的。
抽象類中的構造方法其實是用來給繼承的子類來用的,因為構造方法相當於初始化方法,當子類調用構造方法時必須調用父類構造方法,所以你可以在子類產生對象時抽象類中按需求初始化抽象類中的欄位以及執行一些初始化代碼。其實並不是一定要生成某個類的實例才調用構造方法,子類也需要調用父類構造方法。
子類在創建實例後,類初始化方法會調用父類的初始化方法(除了Java.lang.Object類,因java.lang.Object類沒有父類),而這種調用會逐級追述,直到java.lang.Object的初始化方法。這個地方我說的是初始化方法,而不是構造方法,因為構造方法是相對於java源程序而言,而編譯後的class文件是初始化方法即" <init>"方法(紅色部分為方法名)。