Sobes.tech
Middle

Wann tritt das Überschreiben einer Methode (Overriding) auf?

sobes.tech KI

Antwort von AI

Methodenüberschreibung in der objektorientierten Programmierung tritt auf, wenn eine Unterklasse eine Methode mit demselben Namen, derselben Signatur (Parameterliste) und demselben Rückgabetyp wie eine Methode in ihrer Elternklasse hat. Dies ermöglicht es der Unterklasse, ihre eigene Implementierung der geerbten Methode bereitzustellen.

Hauptbedingungen für die Überschreibung:

  • Vererbung: Die Unterklasse muss von der Elternklasse erben.
  • Methodensignatur: Die überschreibende Methode in der Unterklasse muss dieselbe Signatur haben (Methodenname und Parameterlistentypen, deren Reihenfolge und Anzahl) wie die Methode in der Elternklasse. In einigen Sprachen (z.B. Java) ist auch erforderlich, dass der Rückgabetyp übereinstimmt oder kovariant ist.
  • Zugriffsmodifikatoren: Der Zugriffsmodifikator der überschriebenen Methode in der Unterklasse darf nicht restriktiver sein als der in der Elternklasse.
  • Nicht überschreiben: Statische (static), finale (final in Java, sealed in C#) und private (private) Methoden nehmen nicht am Polymorphismus durch Vererbung teil.

Beispiel in Java:

// Elternklasse
class Animal {
    public void sound() {
        // Standardimplementierung
        System.out.println("Tier macht ein Geräusch");
    }
}

// Unterklasse, die die Methode sound() überschreibt
class Dog extends Animal {
    @Override // Annotation zur Überprüfung durch den Compiler
    public void sound() {
        // Spezifische Implementierung für Dog
        System.out.println("Hund bellt");
    }
}

class Main {
    public static void main(String[] args) {
        Animal meinTier = new Animal();
        Animal meinHundAlsTier = new Dog(); // Polymorphismus
        Dog meinHund = new Dog();

        meinTier.sound();      // Ruft sound() aus Animal auf
        meinHundAlsTier.sound(); // Ruft die überschreibende sound() aus Dog auf (durch Polymorphismus)
        meinHund.sound();         // Ruft die überschreibende sound() aus Dog auf
    }
}

Beispiel in Python:

# Elternklasse
class Animal:
    def sound(self):
        # Standardimplementierung
        print("Tier macht ein Geräusch")

# Unterklasse, die die Methode sound() überschreibt
class Dog(Animal):
    def sound(self):
        # Spezifische Implementierung für Dog
        print("Hund bellt")

# Verwendung
mein_animal = Animal()
mein_hundAlsTier = Dog() # Polymorphismus
mein_hund = Dog()

mein_animal.sound()       # Ruft sound() aus Animal auf
mein_hundAlsTier.sound()  # Ruft die überschreibende sound() aus Dog auf (durch Polymorphismus)
mein_hund.sound()          # Ruft die überschreibende sound() aus Dog auf

Das Überschreiben wird verwendet, um Polymorphismus zur Laufzeit zu erreichen, was es ermöglicht, je nach tatsächlichem Objekttyp unterschiedliche Aktionen auszuführen, obwohl auf die Elternklasse verwiesen wird. Dies ist ein grundlegendes Prinzip der objektorientierten Programmierung, um flexible und erweiterbare Systeme zu bauen.