Ⅰ 如何從子類中調用一個被重寫的父類的方法
比如class
child類繼承自class
parent,重載了parent的test方法,
那麼child類想調用父類的test方法時,可以寫成parent::test();
請採納,謝謝
Ⅱ 子類怎樣調用父類方法
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!
Ⅲ 如何從子類顯式得調用父類的構造方法
當父類中有多個構造函數,且沒有定義默認構造函數的話,當繼承或者創建對象的時候,系統將對變數進行初始化,但系統將不能在父類中找到默認構造函數,所以這個時候要指定一個已定義的構造函數。
「類可以沒有構造方法,但如果有多個構造方法,就應該要有默認的構造方法,
否則在繼承此類時,需要在子類中顯式調用父類的某一個非默認的構造方法了。」
class Parent{
Parent(int a,int b);
};
class Son:public class Parent{
Son();
Son(int a,int b);
};
int a,b;
Son(a,b);