Ciao mi chiedo se c'è una semplice soluzione al mio problema,ArrayList contenente diversi oggetti dello stesso superclasse - come accedere metodo di una sottoclasse
Ho un 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());
Tutti implementano un metodo move()
- Il Bird
vola quando viene chiamato move()
. So che posso accedere a metodi e le proprietà della classe Super comuni utilizzando questo
public void feed(Integer animalIndex) {
Animal aAnimal = (Animal) this.animalList.get(animalIndex);
aAnimal.eat();
}
va bene - ma ora vorrei accedere al metodo move()
la sottoclasse Bird
ha. ho potuto farlo lanciando il Animal
come Bird
:
Bird aBird = (Bird) this.animalList.get(animalIndex);
aBird.move();
Nella mia situazione non voglio fare questo, perché vorrà dire che ho 3 diversi set di codice uno sopra per ogni sottotipo di Animal
.
Sembra un po 'ridondante, c'è un modo migliore?
perché non dovrebbe avere un animale 'mossa()' metodo che si ignorare nelle sottoclassi? –
... Chiama mossa? Se non sta chiamando l'implementazione della sottoclasse, c'è qualcosa che non ci stai dicendo. –
@ user2278797 Solo così sai: ho modificato la tua domanda per una migliore formattazione e cambiato i nomi delle classi (in quanto erano incoerenti tra il tuo codice): ho rimosso 's'-es dai loro nomi nelle linee in cui erano stati aggiunti 'animalList'. Erano: 'animalList.add (new Reptiles()); animalList.aggiungere (nuovi Uccelli()); animalList.add (new Anphibians()); 'E ora sono:' animalList.add (new Reptile()); animalList.add (new Bird()); animalList.add (new Anphibian()); '. Se li hai utilizzati in qualsiasi codice, assicurati di modificarli di conseguenza o di modificare di nuovo il codice della tua domanda. – acdcjunior