Ho una domanda sull'applicazione del polimorfismo: supponiamo di avere una classe Bird
e ho molte classi che la estendono (come Pigeon
, Falcon
e così via). Successivamente, ho una classe Cage
. In questa classe, voglio fare una lista di uccelli che vivono in quella gabbia (solo un tipo di uccello può vivere in ogni gabbia).Inizializzazione dell'elenco di oggetti usando il polimorfismo
A causa di ciò, non so il tipo esteso della lista (A Pigeon
? O forse un Eagle
?), L'unica cosa che so è che sarà un Bird
.
Se Pigeon extends Bird
Uso del polimorfismo posso dichiarare un uccello come: Bird tom = new Pigeon();
invece di Pigeon tom = new Pigeon();
Allora, perché non posso inizializzare una cosa del genere nel costruttore: [...]
private List<Bird> birdList;
public Cage() {
this.birdList = new ArrayList<Pigeon>();
/* Instead of birdList = new ArrayList<Bird>(); */
}
Se non riesci a farlo, è possibile raggiungere il mio obiettivo in un altro modo?
risposta breve perché non sono dello stesso tipo. – xiaoyi
leggi questa discussione http://stackoverflow.com/questions/2745265/is-listdog-a-subclass-of-listanimal-why-arent-javas-generics-implicitly-p –