我需要一份所有动物的清单。我有一个基本的Animal
课程,并希望将它扩展到狗,猫,鬣蜥等。
有没有一种方法可以将它们整合到一个List
中?
我希望能够检查所有动物的完整列表,而无需更改所有以前制作的动物。他们应该了解所有其他Animal
课程。
答案 0 :(得分:3)
您可以通过扩展Animal
这样的基类来生成任意数量的Animal
:
public class Dog extends Animal {
}
然后你可以宣布一份新的动物名单。
List<Animal> animals = new ArrayList<Animal>();
完成后,您可以添加任意数量的新对象,将Animal
类扩展到列表中。
animals.add(new Dog());
animals.add(new Cat());
animals.add(new Iguana());
答案 1 :(得分:3)
您可以像这样创建List<Animal>
:
// create empty list
List<Animal> animals = new ArrayList<>();
// add any kind of animal
animals.add(new Kangaroo());
animals.add(new Butterfly());
// use that list later
int numberOfAnimals = animals.size();
for (Animal animal : animals) {
// do something
}
要记住的事情:
instanceof
)extends Animal
。ArrayList
的特殊功能,请将您的动物设为ArrayList
。但在大多数情况下,将变量定义为List
甚至Collection
(或Iterable
)会使您的代码更加灵活。答案 2 :(得分:1)
它被称为Polymorphism。所以基本上,你自己回答了你的问题。在Java中添加已声明集合类型的子类型的集合对象是完全合法的。
答案 3 :(得分:1)
您可以使用List<? extends Animal> animals = new ArrayList<>();
然后将任何类型的动物添加到列表中。