Nadpisywanie metod w Javie

Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji

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.