Ho una classe astratta Dog e più sottoclassi ( Beagle , Labrador , Bulldog ...) estendendolo. Ho un DogHouse che può memorizzare Dog .
Il mio problema è che quando metto ad esempio un Beagle in un DogHouse come doghouse.addDog(beagle) e poi lo tolgo con doghouse.getDog() , questo metodo mi dà il beagle come Dog , ma voglio per recuperare il mio Beagle .
DogHouse ha molti più metodi, tutti mi danno Dogs , ma lavoro con cani specifici nella mia applicazione. Significa che devo sempre abbattere?
Aggiornamento:
Sto usando TypeScript e posso modificare qualsiasi parte del codice in modo che le mie opzioni siano praticamente infinite. Quello che non capisco:
Immagina di avere due scuole di cani. Sapendo che le diverse razze di cani sono capaci di cose molto diverse e hanno bisogno di cure e allenamenti diversi, la scuola di cane 1 è specializzata in Greyhound s, mentre l'altra è allenamento diciamo solo Bulldog s.
C'è un'azienda che vende DogHouse s. Dicono che il loro prodotto è compatibile con qualsiasi tipo di Dog , quindi entrambe le scuole di cani decidono di acquistare da loro.
Un allenatore alla scuola di cani 1 dice a un Greyhound di correre molto velocemente: greyhound.runVeryFast(); - qualcosa che solo i greyhound possono fare. Funziona.
Quindi, manda il levriero in una DogHouse: doghouse.addDog(greyhound); - che funziona anche.
Dopo che il cane ha potuto riposare abbastanza, lei lo chiama e gli dice di correre di nuovo molto velocemente: doghouse.getDog().runVeryFast(); - Non funziona.
Si rivolge alla società che vende il DogHouse s per lamentarsi di quale stupida casa hanno costruito che un cane dimentica in quale razza appartiene. "Perché devo dire al cane (il cast di lui) che è un Greyhound ogni volta che esce da casa sua?"
La società risponde "Scusa signora, forse possiamo costruire una nuova casa usando i farmaci generici." Ma poi la signora risponde: "E accetterà allora anche Cat s"? Voglio solo una casa per Dog s. "
Quindi la mia domanda è: come costruire un DogHouse corretto?