Per polimorfismo si intende la proprietà di una entità di assumere forme diverse nel tempo. Un riferimento è polimorfo se esso può riferirsi, nel tempo, ad oggetti di classe diversa.

Siano ad esempio a, b due oggetti appartenenti rispettivamente alle classi A, B, che prevedono entrambe una operazione m, con diverse implementazioni. Si consideri l'assegnazione:

a := b

L'esecuzione della operazione m sull'oggetto a dopo l'assegnazione, per la quale è spesso adoperata la sintassi:

a.m()

produce l'esecuzione della implementazione di m specificata per la classe B.

Il polimorfismo, assieme all'ereditarietà ed al "binding" dinamico, supporta la proprietà di estensibilità di un sistema, nel senso che minimizza la quantità di codice che occorre modificare quando si estende il sistema, ovvero si introducono nuove classi e nuove funzionalità.

Il polimorfismo ed il binding dinamico si ritrovano nel linguaggio C++ nel concetto di funzioni virtuali.