Quote Originariamente inviata da Gas75 Visualizza il messaggio
se so che potrei avere bisogno di usare dei metodi della classe Gatto, perché lo creo come animale generico per poi dover fare necessariamente il casting?
Avere un super-tipo più generico, prendiamo l'esempio di Animale e poi Gatto/Cane/ecc..., è utile per sfruttare il polimorfismo. Pensa ad esempio ad un metodo che riceve (o restituisce) un Animale[] o List<Animale>. Possono contenere qualunque cosa che deriva da Animale e magari il metodo ha bisogno solo di "vedere" gli oggetti come Animale e non come uno dei tipi più specifici.

Il punto in questi casi è: dato uno scenario in cui hai uno o più oggetti "visti" solo come il super-tipo (Animale), PERCHE' hai bisogno di fare operazioni che sono specifiche delle sotto-classi? Se è un caso particolare, ci sono motivi validi o cose del genere, allora può aver senso. Se invece ti trovi ad aver molto o continuamente bisogno di operazioni specifiche dei sotto-tipi, allora o la tua gerarchia è "disegnata" male oppure stai cercando di fare delle cose che sarebbe meglio risolvere in modo differente.