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:
- Metoda w klasie nadrzędnej nie powinna być zadeklarowana jako
final(lub równoważny modyfikator w innych językach), co uniemożliwia nadpisanie. - Poziom dostępu nadpisanej metody w klasie potomnej nie może być bardziej restrykcyjny niż w metodzie w klasie nadrzędnej.
- Nadpisana metoda może zwracać ten sam typ, co metoda w klasie nadrzędnej, lub typ kowariantowy (podtyp oryginalnego typu).
- 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.
- 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");
}
}