ArrayList, содержащий разные объекты одного и того же суперкласса - как получить доступ к методу подкласса

Привет ямне интересно, есть ли простое решение моей проблемы,

У меня есть :ArrayList

ArrayList  animalList = new ArrayList(); 

/* 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 есть. Я мог бы сделать это, бросивAnimal как :Bird

Bird aBird = (Bird) this.animalList.get(animalIndex);
aBird.move();

В моей ситуации я неЯ не хочу этого делать, так как это будет означать, что у меня есть 3 различных набора вышеуказанного кода, по одному для каждого подтипа.Animal

Кажется, немного излишним, есть ли лучший способ?

Ответы на вопрос(4)

Ваш ответ на вопрос