da wikipedia
In generale, il polimorfismo è una proprietà del codice in grado di comportarsi diversamente in diversi contesti di esecuzione. In pratica, questo avviene quando lo stesso codice può essere utilizzato con istanze di tipi diversi. Nella programmazione orientata agli oggetti il polimorfismo è solitamente legato alle relazioni di eredità tra classi, che garantisce delle proprietà in comune tra gli oggetti: nei linguaggi ad oggetti tipizzati le istanze di una sottoclasse possono essere utilizzate per inclusione al posto di istanze della superclasse (polimorfismo per inclusione). La possibilità che le classi derivate implementino in modo differente i metodi e le proprietà dei propri antenati rende possibile che gli oggetti appartenenti a delle sottoclassi di una stessa classe rispondano diversamente alle stesse istruzioni. Ad esempio in una gerarchia in cui le classi "Cane" e "Gatto" discendono dalla SuperClasse "Animale" potremmo avere il metodo mangia() che restituisce la stringa "osso" se eseguito sulla classe "Cane" e "pesce" se eseguito sulla classe "Gatto". I metodi che vengono ridefiniti in una sottoclasse sono detti polimorfi, in quanto lo stesso metodo si comporta diversamente a seconda del tipo di oggetto su cui è invocato.