java泛型基类list_泛型:列表?扩展Animal与List Animal相同吗?
使用List,您知道所擁有的絕對是動物列表。實際上,所有這些都不一定完全是“動物”,它們也可以是派生類型。例如,如果您有動物清單,那么一對夫婦可能是山羊,其中一些可能是貓,等等,對嗎?
例如,這是完全有效的:
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
當然,以下將不會是有效的:
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;
實際上,這不是 L可以容納的對象類型的聲明。這是關于L可以引用哪些列表的聲明。
例如,我們可以這樣做:
L = aL; // remember aL is a List of Animals
但是現在,所有編譯器都知道L是它是[Animal或Animal的子類型]的列表
因此,以下內容無效:
L.add(new Animal()); // throws a compiletime error
因為據我們所知,L可能引用的是山羊列表-我們無法在其中添加動物。
原因如下:
List gL = new List(); // fine
gL.add(new Goat()); // fine
gL.add(new Animal()); // compiletime error
在上面,我們試圖將動物鑄造為山羊。那是行不通的,因為這樣做之后,如果我們試圖讓Animal像山羊一樣做“頭撞”怎么辦?我們不一定知道動物可以做到這一點。
總結
以上是生活随笔為你收集整理的java泛型基类list_泛型:列表?扩展Animal与List Animal相同吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java多播_Java多播发送数据,未接
- 下一篇: java opencv 开发环境_在In