1.3.3. Polymorfismus

Polymorfismus je vlastnost, se kterou se v informatice setkáváme v několika různých podobách. V kontextu objektově orientovaných metod se polymorfismus chápe jako vlastnost operace, která může mít více implementací. Konkrétní implementace se pak vybere v závislosti na konkrétním typu objektu, nad nímž se operace provádí.

To například znamená, že v případě operace tisk() z Obr. 1.10 se při jejím volání například z těla objednávky na objekt reprezentující odběratele použije vhodná implementace v závislosti na tom, je-li odběratelem firma nebo fyzická osoba. Vzhledem k tomu, že konkrétní podtřída musí implementovat všechny zděděné operace, je zaručeno, že se vhodná implementace volané operace vždy najde.

Kromě možnosti odložení implementace abstraktní metody na následníky třídy poskytuje polymorfismus ještě jednu důležitou službu - umožní překrytí konkrétní operace v odvozené třídě jinou implementací. Pokud by operace tisk() ve třídě Zákazník nebyla abstraktní, ale tiskla by údaje, které jsou společné všem zákazníkům (jméno, adresa, e-mail), pak bychom tuto operaci mohli ve třídě Firma překrýt implementací, která nejprve spustí původní zděděnou implementaci operace tisk(), a pak ještě k vytištěným informacím připojí data, která má Firma navíc. Tato metoda je všeobecně uznávaná jako postup pro rozšíření chování operací nadřazených tříd.

Mohli bychom také zcela původní implementaci nahradit, ovšem tento postup není obecně vhodný, neboť by při něm mohlo dojít k nepředvídaným chybám a vedlejším efektům. A to zejména tehdy, pokud nejsme dostatečně s původní implementací seznámeni a neznáme všechny důsledky, k nimž ignorování zděděné implementace může vést.