Middle
Kedy dochádza k prepísaniu metódy (Overriding)?
sobes.tech AI
Odpoveď od AI
Prepísanie metódy (Overriding) v objektovo orientovanom programovaní nastáva, keď má podtrieda metódu s rovnakým menom, zoznamom parametrov (alebo signatúrou) a typom návratovej hodnoty ako metóda v jej rodičovskej triede. To umožňuje podtriede poskytnúť vlastnú implementáciu zdedené metódy.
Hlavné podmienky pre prepísanie:
- Dedičnosť: Podtrieda musí dediť od rodičovskej triedy.
- Signatúra metódy: Prepisovaná metóda v podtriede musí mať rovnakú signatúru (názov metódy a zoznam typov parametrov, ich poradie a počet), ako metóda v rodičovskej triede. V niektorých jazykoch (napríklad Java) je tiež požadované zhodné alebo kovariantné typu návratovej hodnoty.
- Modifikátory prístupu: Modifikátor prístupu prepísanej metódy v podtriede nemôže byť restriktívnejší ako u metódy v rodičovskej triede.
- Nie je možné prepísať: Statické (
static), finálne (finalv Jave,sealedv C#) a súkromné (private) metódy, pretože sa nezúčastňujú na polymorfizme cez dedičstvo.
Príklad v Jave:
// Rodičovská trieda
class Animal {
public void sound() {
// Výchozí implementácia
System.out.println("Zvieracie vydáva zvuk");
}
}
// Podtrieda prepíšuaca metódu sound()
class Dog extends Animal {
@Override // Anotácia pre kontrolu kompilátorom
public void sound() {
// Špecifická implementácia pre Dog
System.out.println("Pes štěká");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDogAsAnimal = new Dog(); // Polymorfizmus
Dog myDog = new Dog();
myAnimal.sound(); // Volá sound() z Animal
myDogAsAnimal.sound(); // Volá prepísaný sound() z Dog (vďaka polymorfizmu)
myDog.sound(); // Volá prepísaný sound() z Dog
}
}
Príklad v Pythone:
# Rodičovská trieda
class Animal:
def sound(self):
# Výchozí implementácia
print("Zvieratá vydávajú zvuk")
# Podtrieda prepíšuaca metódu sound()
class Dog(Animal):
def sound(self):
# Špecifická implementácia pre Dog
print("Pes štěká")
# Použitie
my_animal = Animal()
my_dog_as_animal = Dog() # Polymorfizmus
my_dog = Dog()
my_animal.sound() # Volá sound() z Animal
my_dog_as_animal.sound() # Volá prepísaný sound() z Dog (vďaka polymorfizmu)
my_dog.sound() # Volá prepísaný sound() z Dog
Prepísanie sa používa na dosiahnutie behového polymorfizmu, umožňuje vykonávať rôzne akcie v závislosti od skutočného typu objektu, aj keď používame odkaz na rodičovský triedu. Toto je kľúčový princíp OOP na tvorbu flexibilných a rozšíriteľných systémov.