嗨,我想知道我的问题是否有一个简单的解决方案,
我有一个ArrayList
:
ArrayList <Animal> animalList = new ArrayList<Animal>();
/* I add some objects from subclasses of Animal */
animalList.add(new Reptile());
animalList.add(new Bird());
animalList.add(new Amphibian());
他们都实现了一个方法move()
-Bird
苍蝇何时move()
被调用。我知道我可以使用这个来访问超类的常用方法和属性
public void feed(Integer animalIndex) {
Animal aAnimal = (Animal) this.animalList.get(animalIndex);
aAnimal.eat();
}
很好 - 但现在我想访问move()
子类Bird
拥有的方法。我可以通过将 as 转换Animal
为Bird
:
Bird aBird = (Bird) this.animalList.get(animalIndex);
aBird.move();
在我的情况下,我不想这样做,因为这意味着我有 3 组不同的上述代码,每个子类型的Animal
.
好像有点多余,有没有更好的办法?