java協變

在java中支持協變的有兩種情況:
1、數組 A是B的超類,則A【】也是B【】的超類,所有用到A【】的地方都可以用B【】替換
2、允許 子類的覆蓋父類函數的返回值類型 是父類被覆蓋返回值類型 的子類

在Java1.4及以前,子類方法如果要覆蓋超類的某個方法,必須具有完全相同的方法簽名,包括返回值也必須完全一樣。
Java5.0放寬了這一限制,只要子類方法與超類方法具有相同的方法簽名,或者子類方法的返回值是超類方法的子類型,就可以覆蓋。
注意:"協變返回(covariant return)",僅在subclass(子類)的返回類型是superclass(父類)返回類型的extension(繼承)時才被容許。

另外,實踐表明,就算返回的兩個類繼承自同一個interface,也無法進行協變。

泛型不支持協變,A是B的超類,List<A>、Set<A>等地方並不能用List<B>、Set<B>來替換。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章