ArrayList zawierający różne obiekty tej samej superklasy - jak uzyskać dostęp do metody podklasy

Cześć Zastanawiam się, czy istnieje proste rozwiązanie mojego problemu,

mamArrayList:

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());

Wszyscy wdrażają metodęmove() - TheBird leci kiedymove() jest nazywany. Wiem, że dzięki temu mogę uzyskać dostęp do popularnych metod i właściwości super klasy

public void feed(Integer animalIndex) {
    Animal aAnimal = (Animal) this.animalList.get(animalIndex);
    aAnimal.eat();
}

To dobrze - ale teraz chciałbym uzyskać dostęp domove() metoda podklasyBird ma. Mogę to zrobić, rzucającAnimal jakBird:

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

W mojej sytuacji nie chcę tego robić, ponieważ będzie to oznaczać, że mam 3 różne zestawy powyższego kodu jeden dla każdego podtypuAnimal.

Wydaje się to trochę zbędne, czy jest lepszy sposób?

questionAnswers(4)

yourAnswerToTheQuestion