【談java協變返回類型】講不清楚你給我寄刀片

用一句話說就是

A繼承B並重寫B的方法,A所重寫的方法的返回值本來必須和B中被重寫方法保持一樣,但是現在可以返回B返回值的子類

舉例說明

假設有A、B、C、D四個類

B繼承A          D繼承C

如果A中有個方法如下

A:

public C f() {  //方法f()的返回值是C類型

return new C();

}

現在B繼承了A 要重寫A的f()方法.它的返回值也得是C    java5以前就是這樣的規定

B:

@Override

public C f() {

return new C(); //重寫後也必須返回值保持相同只能返回C

}

這個時候這個協變返回類型作用出現了

B:

@Override

public C f() {             //雖然方法表達式中返回值類型寫的還是C看左邊,但是依舊可以返回C的子類,這就是協變返回

return new D();  //B重寫A中的方法,但是返回值卻是D,不是說必須返回值一致嗎?憑什麼你就敢返回D了呢?

                                                                //就憑D是C的子類.我就可以返回~~這就是協變返回

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章