Nella programmazione object oriented l’ereditarietà è una cosa piuttosto complicata da utilizzare. Se non si vogliono fare pasticci è bene riflettere prima di scrivere il codice. Soprattutto tenendo conto del significato di Classe, Oggetto ed Istanza.
Ecco un esempio apparentemente semplice che in realtà nasconde un’insidia non semplice da risolversi.
Classi:
SpecieProtette
Orso
Panda
Panda è una sottoclasse delle classe SpecieProtette.
Panda è una sottoclasse della classe Orso.
La situazione sembrerebbe ben rappresentata così:
Quando andiamo a creare istanze delle varie classi avremo la seguente situazione:
Un’istanza di Panda e Orso è un singolo animale.
Un’istanza di SpecieProtette è una Specie.
Ad esempio:
Istanze di Panda: An-An, Chu-Chu, Ling-Ling.
Istanze di Orso: Yoghi, Bubu, Teddy.
Istanze di SpecieProtette: Topo muschiato, Castoro maculato, Mantide lamellata.
E’ corretto dire: Ling-Ling è un’istanza di Panda e quindi di Orso.
E’ errato dire: Ling-Ling è un’istanza di Panda e quindi di SpecieProtette perché un’istanza di SpecieProtette NON è un singolo esemplare.
Quindi pur essendo Panda una sottoclasse di Orso e di SpecieProtette sembra che le sue istanze ereditino da Orso ma non da SpecieProtette.
Trovate l’errore e la soluzione.