Polymorfism innebär inom objektorienterad programmering att samma operation kan få olika beteenden beroende på objektets konkreta typ. Koden kan arbeta mot en gemensam superklass eller ett interface.
Anta att klassen Djur har metoden lat() och att underklassen Hund överskuggar den för att skälla. I Djur djur = new Hund(); är variabelns deklarerade typ Djur, men objektet är en Hund.
Anropet djur.lat() använder då hundens implementation. Det är objektets konkreta typ vid körningen som avgör vilken överskuggad instansmetod som körs.