java中的覆蓋方法具有以下功能:java中的覆蓋方法約束
1> Overrinding方法應該具有與Parent類方法相同的參數列表。
2>返回類型應該與父類方法的返回類型相同/子類。
3>訪問級別應與父類方法相同或更少限制。
4>重寫方法可以拋出相同或更窄的異常,而不是更廣泛的。
* 只是想知道爲什麼會這樣的點*
* 2 - 爲什麼子爲什麼不超? *
3 - 爲什麼訪問級別應該限制較少?
4 - 爲什麼它應該拋出狹窄的異常?
按我的理解它只是如果我創建一個父類refrence創建一個子類對象,並試圖跑下來每個場景,然後
讓我們假設A是父類和B是子類均具有方法printAndReturnSomething()
public class A{
public B printAndReturnSomething(){
S.O.P("Inside A Print");
return new B();
}
}
現在我們有孩子的B類爲
public class B extends A{
public A printAndReturnSomething(){ // I know this isn't possible to return A but had it been then
S.O.P("Inside A Print");
return new A();
}
}
現在,如果我做這樣的事情
A a =new B();
,現在我有一個這樣的引用我期待的返回類型爲B型的
B returnedValue=a.printAndReturnSomething(); // But it actually calls the child class method and hence returns A. So here comes the contradiction.
Similaraly爲情景3和4.我的理解是否正確?我錯過了其他更相關的東西嗎?
感謝您的回答,特別是最後一行「始終將繼承看作」像超類一樣行事「,或者」可以像超類一樣對待「,所有這些都應該清楚。 – Deva