Cytat(thek @ 14.10.2011, 00:23:14 )

Dość prostym i zrozumiałym przykładem polimorfizmu jest przeciążanie funkcji. Wywołana metoda produkuje różne wyniki w zależności od tego jakiego typu dane otrzymała lub ile ich otrzymała. Inaczej może choćby reagować gdy otrzyma liczbę, a inaczej gdy jest to tablica lub obiekt określonej klasy. Jest więc do pewnego stopnia pewnym bytem abstrakcyjnym. Wywołujesz go zawsze jednakowo, ale efekty jego działania w zależności od sytuacji, kontekstu, mogą dawać różne wyniki.
A oto przykład tego czym polimorfizm
nie jest.
Jest ogromna różnica pomiędzy przeciążaniem metod (ang.
overloading) a ich nadpisywaniem (and.
overriding). To co opisał
~thek to
overloading, podczas którego mechanizm polimorfizmu najzwyklej w świecie nie działa!
Polimorfizm jest to mechanizm podczas, którego obiekt może występować jako obiekt różnych typów. Oznacza to, że obiekt zmienia swoją formę w zależności od referencji.
Przykład z polami figur jest OK. Przykład z przeciążaniem metod jest fatalny!
---update---Można by się zagłębiać w czeluście teoretyzowania i powiedzieć, że przecież przykład z przeciążeniem metod to mechanizm
ad-hoc polimorfizm ale to nie jest
clue sprawy. To nadal nie jest polimorfizm na poziomie obiektów, o którym mowa w tym przypadku i w 99% procentach rozmów o polimorfizmie.
Zresztą
ad-hoc polimorfizm to tylko polimorfizm z nazwy.