Co to jest polimorfizm?
Polimorfizm to jedna z podstawowych cech programowania obiektowego. Oznacza, że obiekty różnych klas mogą być traktowane w jednolity sposób, jeśli mają wspólną klasę bazową lub implementują ten sam interfejs.
W praktyce pozwala to wywołać tę samą metodę, np. liczPole(), na różnych figurach geometrycznych, a każda figura obliczy pole według własnego wzoru.
Przykład z figurami
Jeżeli istnieje klasa bazowa Figura, może ona deklarować metodę:
abstract class Figura {
abstract double liczPole();
}
Klasy pochodne, np. Trojkat, Kwadrat, Trapez, implementują tę metodę po swojemu:
class Kwadrat extends Figura {
double bok;
double liczPole() {
return bok * bok;
}
}
Dzięki polimorfizmowi można przechowywać różne figury w jednej kolekcji:
List<Figura> figury = new ArrayList<>();
i dla każdej wywołać:
figura.liczPole();
Dlaczego metoda jest deklarowana w klasie bazowej?
Jeżeli każda figura ma mieć metodę obliczania pola, jej deklaracja powinna znaleźć się w najbardziej ogólnej klasie, czyli Figura. Klasy szczegółowe dziedziczą ten obowiązek i definiują własny sposób obliczania pola.
Najważniejsze cechy
- wspólny interfejs dla różnych klas,
- możliwość wywoływania tej samej metody na różnych obiektach,
- często używany razem z dziedziczeniem i metodami abstrakcyjnymi,
- ułatwia rozbudowę programu o nowe klasy.