Was ist Überschreiben (Overriding) in der Programmierung?
sobes.tech KI
Antwort von AI
Method Overriding (Überschreiben) ist die Möglichkeit einer Unterklasse, ihre eigene Implementierung einer Methode bereitzustellen, die bereits in ihrer Elternklasse definiert ist. Die Signatur der überschriebenen Methode (Name, Anzahl und Typen der Parameter) in der Unterklasse muss vollständig mit der Signatur der Methode in der Elternklasse übereinstimmen. Der Rückgabetyp muss ebenfalls entweder derselbe sein oder kovariant (Untertyp) des Rückgabetyps der Elternmethode.
Wichtige Aspekte des Überschreibens:
- Vererbung: Überschreiben ist nur im Kontext von Vererbungsverhältnissen möglich, bei denen die Unterklasse eine Methode von der Oberklasse erbt.
- Polymorphismus: Überschreiben ist einer der Mechanismen zur Implementierung von Laufzeitpolymorphismus (runtime polymorphism). Das bedeutet, dass je nach tatsächlichem Objekttyp, der über eine Referenz auf den Elterntyp aufgerufen wird, die entsprechende Methodenausführung erfolgt (entweder aus der Eltern- oder aus der Kindklasse).
- Schlüsselwort
@Override: In einigen Sprachen (z.B. Java) wird die Annotation@Overrideverwendet. Sie ist nicht zwingend erforderlich für eine korrekte Überschreibung, wird aber empfohlen, um die Lesbarkeit des Codes zu verbessern und Compilerfehler zu vermeiden, wenn die Methode nicht den Überschreibungsregeln entspricht. - Zugriff auf die Elternmethode: Innerhalb der überschriebenen Methode in der Unterklasse ist es oft notwendig, die Implementierung derselben Methode aus der Elternklasse aufzurufen. Dafür wird das Schlüsselwort
superverwendet (z.B.super.methode()).
Beispiel in Java:
// Elternklasse
class Animal {
// Methode in der Elternklasse
void makeSound() {
System.out.println("Das Tier macht ein Geräusch");
}
}
// Unterklasse, die von Animal erbt
class Dog extends Animal {
// Überschreiben der Methode makeSound()
@Override
void makeSound() {
System.out.println("Wuff wuff!");
}
// Beispiel für den Aufruf der Elternmethode
void eat() {
System.out.println("Der Hund frisst.");
super.makeSound(); // Ruft die Methode aus der Elternklasse auf
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal();
Animal myDog = new Dog(); // Polymorphismus
myAnimal.makeSound(); // Gibt aus: Das Tier macht ein Geräusch
myDog.makeSound(); // Gibt aus: Wuff wuff! (Aufruf der überschriebenen Methode)
Dog specificDog = new Dog();
specificDog.eat(); // Gibt aus: Der Hund frisst.
// Das Tier macht ein Geräusch
}
}
Beispiel in Python:
# Elternklasse
class Animal:
# Methode in der Elternklasse
def make_sound(self):
print("Das Tier macht ein Geräusch")
# Unterklasse, die von Animal erbt
class Dog(Animal):
# Überschreiben der Methode make_sound()
def make_sound(self):
print("Wuff wuff!")
# Beispiel für den Aufruf der Elternmethode
def eat(self):
print("Der Hund frisst.")
super().make_sound() # Ruft die Methode aus der Elternklasse auf
# Demonstration
my_animal = Animal()
my_dog = Dog() # Polymorphismus
my_animal.make_sound() # Gibt aus: Das Tier macht ein Geräusch
my_dog.make_sound() # Gibt aus: Wuff wuff!
specific_dog = Dog()
specific_dog.eat() # Gibt aus: Der Hund frisst.
# Das Tier macht ein Geräusch
Das Überschreiben wird verwendet, um das Verhalten der Basisklasse an die Spezifika der Unterklasse anzupassen, während die allgemeine Schnittstelle beibehalten wird. Es ist ein Schlüsselelement des objektorientierten Designs.