Sobes.tech
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