Sobes.tech
Junior

Kiedy metoda jest uważana za nadpisaną (overriding)?

sobes.tech AI

Odpowiedź od AI

Metoda uważa się za nadpisaną, gdy w klasie potomnej deklaruje się metodę z taką samą sygnaturą (nazwa metody, liczba i typy parametrów w tej samej kolejności), co metoda w klasie nadrzędnej. Ponadto:

  1. Metoda w klasie nadrzędnej nie powinna być zadeklarowana jako final (lub równoważny modyfikator w innych językach), co uniemożliwia nadpisanie.
  2. Poziom dostępu nadpisanej metody w klasie potomnej nie może być bardziej restrykcyjny niż w metodzie w klasie nadrzędnej.
  3. Nadpisana metoda może zwracać ten sam typ, co metoda w klasie nadrzędnej, lub typ kowariantowy (podtyp oryginalnego typu).
  4. Nadpisana metoda nie może rzucać wyjątków, które są bardziej ogólne (lub niekompatybilne) niż wyjątki zadeklarowane w metodzie w klasie nadrzędnej.
  5. Metody statyczne nie mogą być nadpisywane, tylko ukrywane (hidden).

Przy wywołaniu nadpisanej metody przez odwołanie do klasy nadrzędnej, ale z obiektem klasy potomnej, wykonywana jest wersja metody z klasy potomnej (polimorfizm).

// Przykład w Java

class Parent {
    public void display() { // Metoda w klasie nadrzędnej
        System.out.println("Parent display");
    }

    // final void cannotOverride() { ... } // Ta metoda nie może być nadpisana
}

class Child extends Parent {
    @Override // Adnotacja @Override pomaga kompilatorowi sprawdzić, czy metoda jest rzeczywiście nadpisywana
    public void display() { // Nadpisana metoda - ta sama sygnatura
        System.out.println("Child display");
    }
}