è il polimorfismo possibile solo quando esiste uno scenario di ereditarietà o l'implementazione del polimorfismo non dipende dall'ereditarietà.
O il polimorfismo è utile soprattutto quando c'è ereditarietà?
Il polimorfismo nell'informatica è un termine più ampio di quello che la tua domanda suggerisce:
List<T>
; Solo l'ultimo modulo è basato sull'ereditarietà. Vedi link
Il polimorfismo non è correlato all'ereditarietà.
Esistono diversi tipi di polimorfismo:
Polimorfismo parametrico : qui, una subroutine è parametrizzata su un tipo, il che significa che non conosce nulla sul tipo. Se non sa nulla, allora ovviamente non sa nemmeno di una relazione di ereditarietà. Esempi sono una subroutine per calcolare la lunghezza di una lista, non ha bisogno di sapere nulla sui tipi di contenuti della lista. (Un altro nome comune per questo tipo di polimorfismo è Generics .)
Polymorphism ad-hoc : contrariamente al polimorfismo parametrico, dove la subroutine non si preoccupa del tipo e si comporta identicamente per ogni tipo, con polimorfismo ad-hoc, ci sono implementazioni ad hoc della subroutine per ogni tipo, in modo che la subroutine si comporti diversamente per ciascun tipo. (Un altro nome comune per questo tipo di polimorfismo è Sovraccarico .)
Polymorphism di inclusione : questo implica una sorta di relazione di sottotipo. (Nota: la sottotipizzazione è non uguale all'ereditarietà, anche se linguaggi come Java e C # confondono i due. In OCaml, ad esempio, esistono entrambi ma sono concetti diversi e distinti.) Il polimorfismo di inclusione significa che un'istanza di un sottotipo può essere trattata come un'istanza di un supertipo. (Il Principio di sostituzione di Liskov ci dice come assicurarsi che sia sicuro.) (Un altro nome comune per questo tipo di polimorfismo è Polymorphism di sottotipo .)
L'ereditarietà può essere utilizzata nel polimorfismo ad-hoc per condividere il codice tra diverse implementazioni di subroutine per evitare la duplicazione del codice. Ma è puramente un metodo per ridurre la duplicazione del codice, non è né necessario né sufficiente per il polimorfismo ad-hoc.
Se non hai sentito parlare di Iniezione delle dipendenze, penso che valga la pena dare un'occhiata. L'implementazione di DI mi ha davvero aiutato a comprendere meglio il polimorfismo, a costruire / testare istanze o oggetti, ecc. Ecco alcuni buoni tutorial: