Java Generics and Collections-2.1
生活随笔
收集整理的這篇文章主要介紹了
Java Generics and Collections-2.1
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
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方法接受一個(gè)T類型的變量,因此,它們分別接受Integer和Number
當(dāng)代碼運(yùn)行到d處時(shí)不會(huì)編譯不過,那么當(dāng)運(yùn)行到e處時(shí),因?yàn)閕nts的add方法接受一個(gè)Integer,而nums的add方法接受一個(gè)Number類型,
由于多態(tài),當(dāng)調(diào)用nums.add()時(shí),實(shí)際調(diào)用為子類的add方法,那么其接受為Integer型,而給出的確實(shí)Double型,而Integer和Double是不能互換的。也就是說,根據(jù)Java的泛型規(guī)范,這樣是不可以的。
因此,對(duì)于Son extends Father的情況,List<Son>不是List<Father>的子類,把它們認(rèn)為是不想關(guān)的好了。
轉(zhuǎn)載于:https://www.cnblogs.com/xiaojintao/p/5303375.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Java Generics and Collections-2.1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [蓝桥杯] 连号区间数
- 下一篇: 19、Java并发编程:线程间协作的两种