Tha*_*iar 7 java polymorphism list
我有一个关于应用多态的问题:让我们假设我有一个类Bird
,并且我有许多扩展它的类(比如Pigeon
,Falcon
依此类推).接下来,我有一Cage
堂课.在这堂课中,我想列出一个生活在笼子里的鸟类(只有一种鸟可以生活在每个笼子里).
因此,我不知道列表的扩展类型(A Pigeon
?或者可能是Eagle
?),我唯一知道的是它将是一个Bird
.
如果 Pigeon extends Bird
使用多态性我可以将一只鸟声明为:
Bird tom = new Pigeon();
而不是Pigeon tom = new Pigeon();
那么为什么我不能在构造函数中初始化类似的东西:[...]
private List<Bird> birdList;
public Cage() {
this.birdList = new ArrayList<Pigeon>();
/* Instead of birdList = new ArrayList<Bird>(); */
}
Run Code Online (Sandbox Code Playgroud)
如果你不能这样做,是否有可能以另一种方式实现我的目标?
您可能想要的是为您的Cage使用通用类型来捕获笼中生活的鸟类.像这样:
import java.util.ArrayList;
import java.util.List;
public class Cage<T extends Bird> {
private List<T> birdList;
public Cage() {
birdList = new ArrayList<T>();
}
public void addBird(T bird) {
birdList.add(bird);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你会像这样使用笼子:
Cage<Eagle> eagleCage = new Cage<Eagle>();
eagleCage.addBird(new Eagle());
Run Code Online (Sandbox Code Playgroud)