Junior
Kiedy dochodzi do nadpisania metody (overriding)?
sobes.tech AI
Odpowiedź od AI
Przesłanianie metody (overriding) występuje w hierarchii dziedziczenia, gdy klasa potomna dostarcza własną implementację metody, która jest już zdefiniowana w klasie nadrzędnej z tym samym nazwą, sygnaturą (dopasowanie typu i liczby parametrów) i typem zwracanym (lub kowariantnym w przypadku typu obiektu zwracanego).
Kluczowe cechy:
- Dziedziczenie: Przesłanianie jest możliwe tylko w kontekście dziedziczenia (klasy nadrzędne i podrzędne).
- Sygnatura: Metoda w klasie potomnej musi mieć tę samą sygnaturę (nazwa, liczba i typy parametrów) oraz typ zwracany (lub jego kowariantny podtyp), co metoda w klasie nadrzędnej.
- Dostępność: Metoda, która jest przesłonięta, musi być dostępna dla klasy potomnej (zwykle
public,protected). - Polimorfizm: Przesłanianie jest podstawą polimorfizmu w czasie wykonywania (runtime polymorphism), umożliwiając obiektom klasy potomnej reagowanie na wywołanie metody na własny sposób, nawet jeśli odwołujemy się do nich przez referencję do klasy nadrzędnej.
Przykład (Java):
// Klasa nadrzędna
class Animal {
// Metoda, która będzie przesłonięta
public void makeSound() {
System.out.println("Animal makes a sound");
}
}
// Klasa potomna
class Dog extends Animal {
// Przesłonięcie metody makeSound()
@Override // Adnotacja @Override jest opcjonalna, ale zalecana
public void makeSound() {
System.out.println("Dog barks");
}
}
Przykład użycia:
// Tworzymy obiekt Dog
Animal myDog = new Dog();
// Wywołujemy metodę. Zostanie wywołana przesłonięta wersja z Dog
myDog.makeSound(); // Wypisze: Dog barks
// Tworzymy obiekt Animal
Animal someAnimal = new Animal();
// Wywołujemy metodę. Zostanie wywołana wersja z Animal
someAnimal.makeSound(); // Wypisze: Animal makes a sound