我需要一個所有動物的列表。我有一個基本的Animal
類,並希望將它擴展到狗,貓,鬣蜥等。Java列表/包含各種動物的動物數組
是否有一種很好的方法將它們全部合併爲一個List
?
我希望能夠檢查所有動物的整個列表,而無需更改所有以前製作的動物。他們應該知道所有其他的Animal
課程。
我需要一個所有動物的列表。我有一個基本的Animal
類,並希望將它擴展到狗,貓,鬣蜥等。Java列表/包含各種動物的動物數組
是否有一種很好的方法將它們全部合併爲一個List
?
我希望能夠檢查所有動物的整個列表,而無需更改所有以前製作的動物。他們應該知道所有其他的Animal
課程。
您可以創建一個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
)會使您的代碼更加靈活。如果我想像'animals.get(0).disp()'那樣做一些東西,當我將元素0添加爲一個狗時,似乎我必須在超類中有一個默認的disp函數,然後在子類中覆蓋它。這似乎不應該,我錯過了明顯的東西? –
您可以通過擴展Animal
基類,這樣做的任何數量的Animal
S:
public class Dog extends Animal {
}
然後你可以聲明動物的一個新的列表。
List<Animal> animals = new ArrayList<Animal>();
一旦你這樣做,你可以添加任意數量的新對象的擴展Animal
類到列表中。
animals.add(new Dog());
animals.add(new Cat());
animals.add(new Iguana());
它被稱爲Polymorphism。所以基本上,你自己回答你的問題。在Java中添加已聲明集合類型的子類型的集合對象是完全合法的。
您可以使用List<? extends Animal> animals = new ArrayList<>();
然後添加任何類型的動物到列表中。
你的意思是,一個'List'? –
爲什麼動物需要相互認識?一旦你回答了這個問題,你可以創建一個類來協調真正需要彼此瞭解的類。 –
你應該閱讀Eric Lippert的這兩個部分http://ericlippert.com/2015/10/19/inferring-from-is/ – Zuzlx