Nadpisywanie metod polega na zdefiniowaniu w klasie pochodnej metody o takim samym nagłówku jak metoda z klasy bazowej. W Javie dotyczy to często metod dziedziczonych z klasy nadrzędnej albo metod abstrakcyjnych, które trzeba zaimplementować.
Warunki nadpisania metody
Aby metoda została poprawnie nadpisana, muszą zgadzać się:
- nazwa metody,
- lista parametrów,
- typ zwracany lub typ zgodny kowariantnie,
- dostęp nie może być bardziej ograniczony niż w klasie bazowej.
Przykład:
abstract class Figura {
abstract double Pole();
}
class Prostokat extends Figura {
public double Pole() {
return 10.0;
}
}
Metoda Pole() w klasie Prostokat nadpisuje abstrakcyjną metodę Pole() z klasy Figura.
Adnotacja @Override
W praktyce często stosuje się adnotację @Override:
@Override
public double Pole() {
return a * b;
}
Nie jest ona obowiązkowa, ale pomaga wykryć błędy. Jeśli programista pomyli nazwę metody, np. napisze LiczPole() zamiast Pole(), kompilator zgłosi błąd.
Typowy błąd
public double LiczPole() {
return a * b;
}
Taka metoda nie implementuje metody Pole(), ponieważ ma inną nazwę. Klasa nadal nie spełnia wymagań klasy abstrakcyjnej i program się nie skompiluje, jeśli klasa pochodna nie zostanie oznaczona jako abstract.