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)行覆蓋。