5."兩同兩小一大"原則

java中“兩同兩小一大"原則是指重寫原則。

方法名相同,參數(shù)類型相同
子類返回類型小于等于父類方法返回類型,
子類拋出異常小于等于父類方法拋出異常,
子類訪問權(quán)限大于等于父類方法訪問權(quán)限

關(guān)于這個問題我是因為做這道題所引發(fā)的

鏈接:https://www.nowcoder.com/questionTerminal/3f4af0f48392470c9493493741be0897
來源:??途W(wǎng)

對于如下代碼段

class A{
public A foo(){return this;}
}
class B extends A{
public A foo(){
return this;
}
}
class C extends B
{
——————這里應(yīng)該填什么
}

可以放入到橫線位置,使程序正確編譯運(yùn)行,而且不產(chǎn)生錯誤的選項是( )

  • public void foo(){}
  • public int foo(){return 1;}
  • public A foo(B b){return b;}
  • public A foo(){return A;}

C

重寫 要求兩同兩小一大原則, 方法名相同,參數(shù)類型相同,子類返回類型小于等于父類方法返回類型, 子類拋出異常小于等于父類方法拋出異常, 子類訪問權(quán)限大于等于父類方法訪問權(quán)限。[注意:這里的返回類型必須要在有繼承關(guān)系的前提下比較]
重載 方法名必須相同,參數(shù)類型必須不同,包括但不限于一項,參數(shù)數(shù)目,參數(shù)類型,參數(shù)順序
再來說說這道題 A B 都是方法名和參數(shù)相同,是重寫,但是返回類型沒與父類返回類型有繼承關(guān)系,錯誤 D 返回一個類錯誤 c的參數(shù)類型與父類不同,所以不是重寫,可以理解為廣義上的重載訪問權(quán)限小于父類,都會顯示錯誤
雖然題目沒點(diǎn)明一定要重載或者重寫,但是當(dāng)你的方法名與參數(shù)類型與父類相同時,已經(jīng)是重寫了,這時候如果返回類型或者異常類型比父類大,或者訪問權(quán)限比父類小都會編譯錯誤

ABD參數(shù)類型相同,算重寫
C算重載

D選項的A沒有定義,所以報錯了!
在繼承中也可能會在子類覆蓋父類中的方法,在覆蓋要注意以下的幾點(diǎn):
1、覆蓋的方法的標(biāo)志必須要和被覆蓋的方法的標(biāo)志完全匹配,才能達(dá)到覆蓋的效果;
2、覆蓋的方法的返回值必須和被覆蓋的方法的返回一致;
3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;
4、被覆蓋的方法不能為 private ,否則在其子類中只是新定義了一個方法,并沒有對其進(jìn)行覆蓋。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容