Java Generics and Collections-2.1
生活随笔
收集整理的這篇文章主要介紹了
Java Generics and Collections-2.1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2.1 子類化以及替換原理
為什么List<Integer> 不是List<Number> 的子類?
首先看下面的代碼,這段代碼是編譯不過的 package java_generics_collections.chap2;import org.junit.Test;import java.util.ArrayList; import java.util.List;/*** Created by jintaox on 2016/3/21.*/ public class Test_2_1 {@Testpublic void test_01() throws Exception {List<Integer> ints = new ArrayList<>(); //aints.add(3);//bints.add(4);//cList<Number> nums = ints;//dnums.add(new Double(3.14));//e} }假如,List 是List的子類型,首先List 中的add方法接受一個T類型的變量,因此,它們分別接受Integer和Number
當代碼運行到d處時不會編譯不過,那么當運行到e處時,因為ints的add方法接受一個Integer,而nums的add方法接受一個Number類型,
由于多態,當調用nums.add()時,實際調用為子類的add方法,那么其接受為Integer型,而給出的確實Double型,而Integer和Double是不能互換的。也就是說,根據Java的泛型規范,這樣是不可以的。
因此,對于Son extends Father的情況,List<Son>不是List<Father>的子類,把它們認為是不想關的好了。
轉載于:https://www.cnblogs.com/xiaojintao/p/5303375.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Java Generics and Collections-2.1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [蓝桥杯] 连号区间数
- 下一篇: [na]tcpdump参数应用参考