Java列表/包含各种动物的动物阵列

时间:2016-02-19 21:03:10

标签: java polymorphism processing

我需要一份所有动物的清单。我有一个基本的Animal课程,并希望将它扩展到狗,猫,鬣蜥等。

有没有一种方法可以将它们整合到一个List中?

我希望能够检查所有动物的完整列表,而无需更改所有以前制作的动物。他们应该了解所有其他Animal课程。

4 个答案:

答案 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
  • 的动物列表中
  • 一般来说,最好将代码保存为 general as posible 。如果您需要ArrayList的特殊功能,请将您的动物设为ArrayList。但在大多数情况下,将变量定义为List甚至Collection(或Iterable)会使您的代码更加灵活。

答案 2 :(得分:1)

它被称为Polymorphism。所以基本上,你自己回答了你的问题。在Java中添加已声明集合类型的子类型的集合对象是完全合法的。

答案 3 :(得分:1)

您可以使用List<? extends Animal> animals = new ArrayList<>();然后将任何类型的动物添加到列表中。