Middle
Mikor történik a metódus felülírása (Overriding)?
sobes.tech MI
Válasz az MI-től
A metódus felülírása (Overriding) az objektum-orientált programozásban akkor történik, amikor az alosztály ugyanazzal a névvel, paraméterlistával (vagy szignatúrával) és visszatérési típussal rendelkezik, mint a szülőosztályban lévő metódus. Ez lehetővé teszi az alosztály számára, hogy saját implementációt nyújtson az örökölt metódushoz.
A felülírás fő feltételei:
- Öröklődés: Az alosztálynak a szülőosztályból kell származnia.
- Metódus szignatúrája: A felülírandó metódusnak ugyanazzal a szignatúrával kell rendelkeznie (metódus neve és a paramétertípusok listája, azok sorrendje és száma), mint a szülőosztályban lévő metódus. Néhány nyelvben (például Java) szükséges a visszatérési típus egyezése vagy kovariánssága.
- Hozzáférési módosítók: A felülírt metódus hozzáférési módosítója nem lehet korlátozóbb, mint a szülőosztályban lévő metódusé.
- Nem felülírható: Statikus (
static), végleges (finalJava-ban,sealedC#-ban) és privát (private) metódusok, mivel nem vesznek részt a polimorfizmusban öröklődésen keresztül.
Java példával:
// Szülőosztály
class Animal {
public void sound() {
// Alapértelmezett implementáció
System.out.println("Állat hangot ad");
}
}
// Alosztály, amely felülírja a sound() metódust
class Dog extends Animal {
@Override // Ellenőrzés a fordító által
public void sound() {
// Különleges implementáció a Dog számára
System.out.println("Kutya ugat");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDogAsAnimal = new Dog(); // Polimorfizmus
Dog myDog = new Dog();
myAnimal.sound(); // Az Animal sound() metódusát hívja
myDogAsAnimal.sound(); // A felülírt sound() metódust hívja a Dog-ból (a polimorfizmus miatt)
myDog.sound(); // A felülírt sound() metódust hívja a Dog-ból
}
}
Python példával:
# Szülőosztály
class Animal:
def sound(self):
# Alapértelmezett implementáció
print("Állat hangot ad")
# Alosztály, amely felülírja a sound() metódust
class Dog(Animal):
def sound(self):
# Különleges implementáció a Dog számára
print("Kutya ugat")
# Használat
my_animal = Animal()
my_dog_as_animal = Dog() # Polimorfizmus
my_dog = Dog()
my_animal.sound() # Az Animal sound() metódusát hívja
my_dog_as_animal.sound() # A felülírt sound() metódust hívja a Dog-ból (a polimorfizmus miatt)
my_dog.sound() # A felülírt sound() metódust hívja a Dog-ból
A felülírás a futásidejű polimorfizmus elérésére szolgál, lehetővé téve különböző műveletek végrehajtását az objektum tényleges típusától függően, annak ellenére, hogy a szülőosztályra mutató hivatkozást használunk. Ez az OOP egyik kulcsfontosságú elve a rugalmas és bővíthető rendszerek kialakításához.