Ⅰ 子類如何調用父類的構造函數
1、子類所有的 構造函數 默認調用父類的無參構造函數
2、如果父類沒有定義構造函數,系統會默認定義一個無參無返回值的構造函數,子類繼承時無需(無需的意思是:可以寫可以不寫)在子類構造函數中顯式調用super( );如果父類定義了有參構造函數,此時子類的構造函數中第一行必須顯式調用父類定義的某個有參數構造函數。即,顯式調用對應的參數個數、對應參數類型與此super( [arg0][,arg1]…. )的父類構造函數。
3、如果子類的某個構造函數 想 調用父類的其他的帶參數的構造函數,在構造函數的第一行人為添加 super(val1,val2[,val3…]),super()括弧中的變數數量由想調用的父類的構造函數中的變數數量決定。如代碼中的line 2,調用的是父類構造函數中兩個參數的構造函數,那麼Super(20,」Hello」)就兩個變數。
4、自行添加super(val1,val2,…),就可以指定調用父類的那個參數類型和數量一致的構造函數。之後在此子類構造函數中,系統不會再默認調用父類無參構造函數;
5、如果子類的每個構造函數都自行添加super([val1,]….),除非人為調用父類無參構造函數,否則的話父類的無參構造函數可以不寫。有super指定調用的父類構造函數存在即可
6、super指代父類對象,可以在子類中使用 super.父類方法名(); 調用父類中的方法(無論是類方法還是實例方法都可以),此外調用實例方法還可以在方法內部實例化再調用
Ⅱ 如何調用父類的構造方法
調用父類的構造方法:
當你new一個子類對象的時候,必須首先要new一個父類的對象出來,這個父類對象位於子類對象的內部,所以說,子類對象比父類對象大,子類對象裡麵包含了一個父類的對象,這是內存中真實的情況.構造方法是new一個對象的時候,必須要調的方法,這是規定,要new父類對象出來,那麼肯定要調用其構造方法,所以:
第一個規則
子類的構造過程中,必須調用其父類的構造方法。一個類,如果我們不寫構造方法,那麼編譯器會幫我們加上一個默認的構造方法,所謂默認的構造方法,就是沒有參數的構造方法,但是如果你自己寫了構造方法,那麼編譯器就不會給你添加了,所以有時候當你new一個子類對象的時候,肯定調用了子類的構造方法,但是在子類構造方法中我們並沒有顯示的調用基類的構造方法,就是沒寫,如:super(); 並沒有這樣寫,但是這樣就會調用父類沒有參數的構造方法,如果父類中沒有沒有參數的構造方法就會出錯。
第二個規則
如果子類的構造方法中沒有顯示的調用基類構造方法,則系統默認調用基類無參數的構造方法注意:如果子類的構造方法中既沒有顯示的調用基類構造方法,而基類中又沒有默認無參的構造方法,則編譯出錯,所以,通常我們需要顯示的:super(參數列表),來調用父類有參數的構造函數。
了解更多java編程知識,推薦來北京尚學堂,雄厚的師資力量與科學的授課方式,會帶給你最完美的學習體驗。
Ⅲ 子類怎樣調用父類方法
publicclassSuperTest{
publicstaticvoidmain(String[]args){
Parentc=newParent();
c.addAll();
}
}
classParent{
publicvoidadd(){
System.out.println("Aadd...");
}
publicvoidaddAll(){
System.out.println("AaddALL...");
add();
//在父子類之間,如果在父類中使用this關鍵字,那麼運行子類時如果走到this行,指的是子類而不是父類。
//誰調用,this就是指誰
System.out.println(this.getClass());
}
}
classChildextendsParent{
@Override
publicvoidadd(){
//TODOAuto-generatedmethodstub
System.out.println("Badd...");
super.add();
}
@Override
publicvoidaddAll(){
//TODOAuto-generatedmethodstub
System.out.println("BaddALL...");
super.addAll();
}
}
最後輸出的結果是
BaddALL...
AaddALL...
Badd...
Aadd...
按我的理解,super.addAll()方法調用來Parent中的addAll(),而Parent中的addAll()調用了add()。這里的add最後調用的是Child的add(),既然是super.addAll(),為何最後竟然調用的是子類的add()方法。。。
這里涉及到的問題是當子類調用super走到父類的方法中,這時的對象this到底是指Child子類還是父類Parent?
正確答案是子類,this.add();其中的this是指當前對象,也就是Childc=newChild();中的c.
因此雖然是在父類中執行的add方法,但實際上執行的是子類的add方法
在父類的add 方法中
System.out.println(this.getClass());
結果是Child而不是Parent!
Ⅳ 子類可以直接調用父類的函數嗎
子類可以直接調用父類申明為public的方法。
1、若子類重寫了父類中的某個函數。
在java中用super.functionName()調用父類方法,用this.functionName()調用子類方法。
在c++中可以用 基類::函數 調用
2、父類未被重寫的public 方法可直接調用。
Ⅳ C#中,實例化子類對象,怎樣調用父類構造方法
在你實例子類對象的時候,會默認地自動調用父類構造方法,然後調用當前類的構造方法(子類)。從上往下 依次進行。也就說 如果父類存在父類 ,也是如此,默認從上往下依次調用。你可以寫個控制台 的demo ,在構造方法中 加個Console.WriteLine("文本"); 試下 就知道了。
Ⅵ C#中子類構造函數中如何調用父類構造函數
通過BAse 來用,在子類中,用戶調用的類型要和父類的調用類型相同才行,不然會出錯,可以參考下面的代碼:
class A {
public A(int a, int b) {}
}
class B : A {
public B (int a, int b, int x, int y) : base(a, b) {}
}
(6)c子對象如何調用父類方法擴展閱讀:
c#函數
Trim Trim(string) 將字元串前後的空格去掉
Ltrim Ltrim(string) 將字元串前面的空格去掉
Rtrim Rtrim(string) 將字元串後面的空格去掉
Mid Mid(string,start,length) 從string字元串的start字元開始取得length長度的字元串,如果省略第三個參數表示從start字元開始到字元串結尾的字元串
Left Left(string,length) 從string字元串的左邊取得length長度的字元串
Right Right(string,length) 從string字元串的右邊取得length長度的字元串