Sobes.tech
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 (final Java-ban, sealed C#-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.