Sobes.tech
Junior

Kiedy w programowaniu dochodzi do nadpisywania metody (overriding)?

sobes.tech AI

Odpowiedź od AI

Przesłanianie metody występuje w dziedziczeniu, gdy klasa pochodna zapewnia własną implementację metody, która już jest zdefiniowana w klasie bazowej. Sygnatura metody (nazwa, typ zwracany i liczba/typy argumentów) musi się zgadzać z metodą w klasie bazowej. Pozwala to na działanie polimorfizmu: obiekt klasy pochodnej, używany jako obiekt klasy bazowej, wywołuje swoją specyficzną implementację metody.

Przykłady zastosowania:

  • Zmiana logiki odziedziczonego zachowania.
  • Zapewnienie specyficznej dla podklasy implementacji wspólnego interfejsu.

Kluczowe punkty:

  • Wymagany jest związek jest-tym (dziedziczenie).
  • Sygnatura metody musi się zgadzać.
  • Modyfikator dostępu może być taki sam lub mniej restrykcyjny niż w metodzie bazowej.
  • Nie można przesłonić metod final lub static (w większości języków).
// Przykład w Java
class Animal {
    public void makeSound() {
        System.out.println("Ogólny dźwięk zwierzęcia");
    }
}

class Dog extends Animal {
    @Override // Adnotacja wskazuje na przesłonięcie
    public void makeSound() {
        System.out.println("Hau!");
    }
}

// Użycie
// Animal myAnimal = new Animal();
// myAnimal.makeSound(); // Wynik: Ogólny dźwięk zwierzęcia
//
// Animal myDog = new Dog();
// myDog.makeSound(); // Wynik: Hau! (wywołuje przesłoniętą metodę)
# Przykład w Python
class Animal:
    def make_sound(self):
        print("Ogólny dźwięk zwierzęcia")

class Dog(Animal):
    def make_sound(self): # Przesłonięcie metody
        print("Hau!")

# Użycie
# animal = Animal()
# animal.make_sound() # Wynik: Ogólny dźwięk zwierzęcia
#
# dog = Dog()
# dog.make_sound() # Wynik: Hau!