java泛型基类list_泛型:列表?扩展Animal与List Animal相同吗?
使用List,您知道所擁有的絕對(duì)是動(dòng)物列表。實(shí)際上,所有這些都不一定完全是“動(dòng)物”,它們也可以是派生類型。例如,如果您有動(dòng)物清單,那么一對(duì)夫婦可能是山羊,其中一些可能是貓,等等,對(duì)嗎?
例如,這是完全有效的:
List aL= new List();
aL.add(new Goat());
aL.add(new Cat());
Animal a = aL.peek();
a.walk(); // assuming walk is a method within Animal
當(dāng)然,以下將不會(huì)是有效的:
aL.peek().meow(); // we can't do this, as it's not guaranteed that aL.peek() will be a Cat
使用List extends Animal>,您可以聲明要處理的列表的類型。
例如:
List extends Animal> L;
實(shí)際上,這不是 L可以容納的對(duì)象類型的聲明。這是關(guān)于L可以引用哪些列表的聲明。
例如,我們可以這樣做:
L = aL; // remember aL is a List of Animals
但是現(xiàn)在,所有編譯器都知道L是它是[Animal或Animal的子類型]的列表
因此,以下內(nèi)容無(wú)效:
L.add(new Animal()); // throws a compiletime error
因?yàn)閾?jù)我們所知,L可能引用的是山羊列表-我們無(wú)法在其中添加動(dòng)物。
原因如下:
List gL = new List(); // fine
gL.add(new Goat()); // fine
gL.add(new Animal()); // compiletime error
在上面,我們?cè)噲D將動(dòng)物鑄造為山羊。那是行不通的,因?yàn)檫@樣做之后,如果我們?cè)噲D讓Animal像山羊一樣做“頭撞”怎么辦?我們不一定知道動(dòng)物可以做到這一點(diǎn)。
總結(jié)
以上是生活随笔為你收集整理的java泛型基类list_泛型:列表?扩展Animal与List Animal相同吗?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java多播_Java多播发送数据,未接
- 下一篇: 单机版五子棋java功能_java实现单