Ⅰ java的子類如何重寫父類的方法
java中重寫父類的方法只需寫出與父類一模一樣的這個方法即可,包括方法名,參數類型,參數值,返回值。
事例代碼如下:
public class Demo extends FDemo{
public static void main(String[] args) {
a();//運行輸出b
}
static void a(){
System.out.println("b");
}
}
class FDemo{
static void a(){
System.out.println("a");
}
}
java重寫父類方法後,原有的父類裡面的實現全部清空,變為重寫後的內容。
1.父類的方法不能降級,同級的話就要覆蓋,例如public方法不能在子類中被聲明為protected或者private(子類重載除外),否則會有
Cannot rece the visibility of the inherited method from Father的編譯錯誤。
2.父類的方法可以任意升級,但升級只有兩種方式,要麼覆蓋,要麼重載,覆蓋就是方法體完全一樣,重載則是參數必須改變,方法名稱不變。
importjava.lang.reflect.Method;
classFather{
inta;
protectedintb=5;
protectedvoidfuncpro(){
//父類的保護方法,子類能夠訪問,但子類自身沒有
System.out.println("fatherfuncpro");
}
publicvoidfuncpub(){
//父類公有方法,子類直接繼承
}
privatevoidfuncpri(){
//父類私有方法,子類不可見
}
}
{
/**
*@paramargs
*/
//父類保護方法的重寫
//publicvoidfuncpro(){
////子類自己可以這樣定義,將會覆蓋父類protected方法
//System.out.println("子類的func方法");
//}
//protectedvoidfuncpro(){
////ok
//}
//publicshortfuncpro(){
////illegal父類的protected和public方法在子類中是可見的,試想一下,如果編譯器認為這個方法體正確,
//那麼子類調用funcpro的時候究竟調用哪個呢?這樣沒有能構成重載
//}
//privatevoidfuncpro(){
////illegal
//}
privatevoidfuncpro(inta){
//這是方法重載,不會報錯
System.out.println("sunfuncpro");
}
//父類公有方法的重寫
//privatevoidfuncpub(){
////illegal:
//}
//protectedvoidfuncpub(){
////illegal
//}
//publicvoidfuncpub(){
////ok
//}
//publicintfuncpub(){
////illegal和父類的返回值不匹配
//}
//publicintfuncpub(inti){
////ok子類構成重載
//return1;
//}
//父類私有方法的重寫
//publicvoidfuncpri(){
////ok
//}
//protectedvoidfuncpri(){
////ok
//}
//privatevoidfuncpri(){
////ok
//}
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
TestOveridetestOveride=newTestOveride();
Classclass1=testOveride.getClass();
try{
Method[]methods=class1.getMethods();
System.out.println("子類中的所有方法:");//可以看到,並沒有父類的funcpro方法
for(Methodm:methods){
System.out.println(m);
}
System.out.println("子類調用父類的protected方法:");
testOveride.funcpro();
System.out.println("子類調用自己的func方法:");
testOveride.funcpro(1);
System.out.println("子類調用父類的欄位");
System.out.println(testOveride.b);
}catch(Exceptione){
e.printStackTrace();
}
}
}
Ⅲ C++ 重寫父類方法問題
用virutal修飾父類中要重寫的函數即可,參考代碼如下:
Ⅳ 子類繼承父類,怎麼把父類的方法重寫
子類繼承父類之後只能重寫父類中的protected和public方法,默認沒有修飾詞的是friendly,同樣可以重寫,但是private方法就不能重寫,即使子類中的方法名和父類的private方法一致,也只能看做是一個新的方法,而不是重寫。
override也就是重寫,覆寫
Ⅳ 子類對父類的方法重寫滿足哪些規則
1、覆蓋的方法的方法名稱和參數類型必須要和被覆蓋的方法的標志完全匹配,才能達到覆蓋的效果;
2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類,或者什麼也不拋出;
4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。
5、覆蓋的方法的訪問許可權必須大於等於被覆蓋方法的訪問許可權。
6、被覆蓋的方法不能是final類型的,因為final類型的方法就是聲明不能被覆蓋。但是覆蓋的方法可以是final類型的,不會影響覆蓋效果。
7、靜態的方法不會發生覆蓋。所以如果父類中的方法為靜態的,而子類中的方法不是靜態的,但是兩個方法除了這一點外其他都滿足覆蓋條件,那麼會發生編譯錯誤。反之亦然。即使父類和子類中的方法都是靜態的,並且滿足覆蓋條件,但是仍然不會發生覆蓋,因為靜態方法是在編譯的時候把靜態方法和類的引用類型進行匹配。
Ⅵ 多態的前提子類重寫父類的方法,
這些抽象行為在向下演化為各種具體行為的過程中,會受到自身環境差異因子,展示出各種不同表象行為。
所以子類通過重寫父類的方法,反映出自己的特徵行為;否則反映的只是抽象的泛泛行為。
指針(引用)越抽象,能指的東西越廣泛。但是相似性區域會越來越少,多態的范圍也越來越小。召喚多態行為的時候要注意抽象的層次,不可太抽象,這樣會導致能召喚的多態行為太少。
Ⅶ 各位前輩請問下子類繼承父類為什麼要重寫 怎麼重寫
子類繼承父類未必要重寫父類的方法,也可以不重寫直接調用,看你的需求。需要重寫就意味著,父類的方法無法滿足子類的業務需求,需要進行改造。這時就需要重寫了。
Ⅷ js中子類重寫父類中方法, 重寫方法中用到父類的方法怎麼調用呢
子類重寫方法是在基類有此方法重寫,那麼聲名一個子類的對象,調用的方法是子類的方法,
通過base轉而調用父類中的方法,最終目的還是調用父類中的方法。
還有重寫方法可以改變基類方法的作用,可以實現其他的效果,重寫方法,和基類同名方法是兩個不同實現的方法,
最主要你要分清楚 重寫跟基類中的方法不一定實現同樣的效果,還有基類也不一定知道派生類中是否重寫了這個方法