我有一个关于应用多态性的问题:假设我有一个类 Bird
,并且我有许多扩展它的类(如 Pigeon
、 Falcon
等)。
接下来,我有一个 Cage
类。在这个类(class)中,我想列出生活在那个笼子里的鸟(每个笼子里只能住一种鸟)。
因此,我不知道列表的扩展类型(一个 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>(); */
}
如果你做不到,是否可以通过其他方式实现我的目标?
最佳答案
您可能想要的是为您的 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);
}
}
然后你会像这样使用笼子:
Cage<Eagle> eagleCage = new Cage<Eagle>();
eagleCage.addBird(new Eagle());