IAnimal anAnimal = new Cat();
Hai ragione. Questo non ha davvero un caso d'uso, poiché non ha alcun vantaggio diretto. Dato che stai codificando il tipo dell'oggetto ( Cat
), non viene ottenuto nulla dal downcasting del tipo di variabile che fa riferimento all'oggetto.
Tuttavia, il tuo argomento non è vero quando Cat
non è codificato a macchina:
IAnimal anAnimal = myAnimalFinder.FindByName("Fido");
Non sai che animale hai intenzione di riavere.
Supponendo che il tuo software sia venduto ai veterinari, il risultato (basato sullo stesso nome) potrebbe essere diverso dal veterinario al veterinario. Il veterinario A ha curato un cane di nome Fido, il veterinario B ha trattato un gatto di nome Fido.
Questo è il caso di utilizzo reale , che in realtà ha senso nel contesto. La versione semplificata a cui ti riferivi inizialmente si trova più comunemente in esempi , non in codice live.
But it won't let you do anAnimal.meow() even though it's a Cat
Osservando il caso d'uso reale, diventa chiaro il motivo per cui non puoi chiamare meow()
. Non hai modo di garantire che in realtà stai recuperando un Cat
, quindi non c'è modo di sapere se l'animale restituito può miagolare o no.