Kijk eens naar het
voorbeeld op wikipedia.
Je hebt een klasse Animal die heel algemene eigenschappen en acties van een dier kan beschrijven. Er is een methode talk(), maar elk dier zegt natuurlijk iets anders.
In OO is het mooi om voor verschillende dieren een subklasse aan te maken. Je maakt dan voor katten en honden klasses aan die Animal extenden. Je kan dan in beide klassen de talk() methode overloaden zodat katten "Miauw" printen en honden "Woef".
Op die manier kan je dieren heel algemeen behandelen. Stel dat je een Persoon klasse hebt en een persoon kan een lijst van huisdieren hebben. Dat is een object van het type List<Animal>. Daar kunnen dan zowel katten als honden inzitten en afhankelijk van welk huisdier je aanspreekt zal de talk() methode een ander resultaat geven.
Een ander voorbeeld. Beschouw een inventory in een computerspelletje. Alle dingen in een inventory kunnen geïmplementeerd zijn als een klasse Item. Daar zijn dan een aantal gemeenschappelijke dingen zoals 'Drop' en 'Sell' ofzo, maar veel items hebben ook een 'Use' actie. Een zwaard en een health potion droppen doet hetzelfde, maar de use actie van beide moet uiteraard verschillend zijn.