我有一个关于应用多态性的问题:假设我有一个类 Bird ,并且我有许多扩展它的类(如 PigeonFalcon 等)。
接下来,我有一个 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());

10-07 23:01