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?