㈠ 子類可以直接調用父類的函數嗎
子類可以直接調用父類申明為public的方法。
1、若子類重寫了父類中的某個函數。
在java中用super.functionName()調用父類方法,用this.functionName()調用子類方法。
在c++中可以用 基類::函數 調用
2、父類未被重寫的public 方法可直接調用。
㈡ 在子類構造器中調用父類方法
使用super關鍵字在子類的構造器里調用父類的普通方法,例如:
/**
*父類
*
*@authorqd
*
*/
classF{
publicvoidteatA(){
System.out.println("teatA方法");
}
}
/**
*子類
*
*@authorqd
*
*/
classSextendsF{
//子類構造器中調用父類普通方法
publicS(){
super.teatA();
}
}
/**
*測試類
*
*@authorqd
*
*/
publicclassTest1{
publicstaticvoidmain(String[]args){
Ss=newS();
}
}
運行結果:
㈢ 如何在java中子類中父類的對象如何調用父類的方法
對於有繼承關系的類,子類可以通過這個關鍵字調用父類中的方法。
比如:super.query();
此句話的意思是調用父類中的非私有方法query。
一般的用super關鍵字,調用類中的父類中重載構造方法。
比如:父類有個構造方法public
A(){},同時又寫了一個重載的構造方法public
A(String
name);那麼,在子類中可以使用super(name)指明調用父類的哪個構造方法進行實例化父類對象。
大概就是這樣的!
㈣ JAVA子類繼承了父類,那麼子類怎麼調用父類的方法
對於已覆蓋的方法來說,例如Child是Parent的子類,而且,Child和Parent都有個toString()方法,也就是說,Child覆蓋Parent的toString()方法。如果child要調用Parent的toString()方法,只需要把child強制轉換為Parent就可以,也就是(Parent)child.toString(),這樣就是調用其父類的toString()方法。如果不是覆蓋的,就不用強制轉換,直接調用就可以。
㈤ 子類如何調用父類的構造函數
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.父類方法名(); 調用父類中的方法(無論是類方法還是實例方法都可以),此外調用實例方法還可以在方法內部實例化再調用
㈥ 子類怎樣調用父類方法
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!