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>來替換。
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>來替換。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
反射獲取Class對象的四種方法
LVAmber
2020-07-08 12:00:21
Java package包,導入包import
LVAmber
2020-07-08 12:00:21
Java俄羅斯輪盤死亡遊戲
LVAmber
2020-07-08 12:00:21
dom4j解析.xml文件
ζMonster°
2020-07-08 10:45:03
學妹問我 JDK1.8 的新特性,我這樣幫她總結
Geffin
2020-07-08 10:04:53
博主在阿里筆試中拿了0分,竟是因爲分不清楚 Java 輸入類 nextLine 與 next 兩個方法的區別
Geffin
2020-07-08 10:04:49
面試官再問你什麼是反射,就把這篇文章發給他!
Geffin
2020-07-08 10:04:49
Java 中 String 與 int 的互相轉化知多少?
Geffin
2020-07-08 10:04:48
面試準備之枚舉類型enum的介紹
wangbiao007
2020-07-08 09:19:19
面試準備之ReentrantLock之源碼分析
wangbiao007
2020-07-08 09:19:19
面試準備之java8的新特性
wangbiao007
2020-07-08 09:19:19
面試準備之Java反射
wangbiao007
2020-07-08 09:19:19
校驗用戶是否登錄過濾器Filter
lpz283929516
2020-07-08 07:40:38
java全角半角間的轉換
lpz283929516
2020-07-08 07:40:37