Zpo-1-wyk-Slajd13
Polimorfizm
Polimorfizm to mechanizm umożliwiający współistnienie różnych metod, które mogą zostać wykonane w odpowiedzi na komunikat odebrany przez obiekt, przy czym wybór metody dokonywany jest dynamicznie, na podstawie typu obiektu odbiorcy. Polimorfizm pozwala zatem traktować odbiorcę komunikatu w sposób abstrakcyjny, bez znajomości jego typu, ponieważ metoda polimorficzna zostanie wybrana automatycznie, bez wiedzy wywołującego ją obiektu.
W języku Java istnieją trzy mechanizmy polimorficzne. Pierwszym jest dziedziczenie, które umożliwia polimorficzne pokrywanie metod. Mechanizm ten jest obecny we wszystkich współczesnych językach obiektowych. W Javie wszystkie metody są dziedziczone polimorficznie, natomiast w C++ metody takie muszą zostać zadeklarowane jako wirtualne.
Drugim mechanizmem są interfejsy i możliwość ich implementacji w klasach. Interfejsy są w języku Java substytutem obecnego w C++ mechanizmu wielokrotnego dziedziczenia. W porównaniu z nim interfejsy są jednak bezpieczniejszym rozwiązaniem, ponieważ służą jedynie do przekazania zewnętrznego kontraktu klasy (jej typu), natomiast nie umożliwiają współdzielenia implementacji.
Ostatnim mechanizmem jest polimorfizm parametryczny, obecny w Javie w postaci tzw. typów generycznych. Pozwala on tworzyć szablony klas, w których niektóre kontrakty (typy) są przekazywane jako parametry klasy. Dzięki temu możliwe jest stworzenie nieograniczonej rodziny klas, o podobnej strukturze, ale różnych kontraktach.