Was sind Vererbung und Polymorphismus in Referenzdatentypen?
sobes.tech KI
Antwort von AI
Vererbung ist ein Mechanismus, der es einer neuen Klasse (Unterklasse, Kindklasse) ermöglicht, Felder und Methoden einer bestehenden Klasse (Elternklasse, Superklasse) zu erben. Dies fördert die Wiederverwendung von Code und die Hierarchie der Klassen.
Polymorphismus (Vielfalt der Formen) ist die Fähigkeit eines Objekts, mehrere Formen anzunehmen. Im Kontext referenzbasierter Datentypen bedeutet dies, dass eine Variable der Superklasse auf ein Objekt der Unterklasse verweisen kann. Dies ermöglicht die einheitliche Behandlung von Objekten verschiedener Unterklassen über eine gemeinsame Schnittstelle oder Superklasse.
Es gibt zwei Hauptarten des Polymorphismus:
- Kompilierungszeit (statischer Polymorphismus): Wird in der Regel durch Methodenüberladung (method overloading) erreicht, wenn eine Klasse mehrere Methoden mit demselben Namen, aber unterschiedlichen Signaturen (Anzahl und/oder Typen der Parameter) hat.
- Laufzeit (dynamischer Polymorphismus): Wird durch Überschreiben von Methoden (method overriding) erreicht, wenn eine Unterklasse ihre eigene Implementierung einer bereits in der Superklasse definierten Methode bereitstellt. Beim Aufruf dieser Methode über eine Referenz auf die Superklasse wird die Implementierung der Unterklasse ausgeführt (wenn der Objekttyp eine Unterklasse ist).
Beispiel für Vererbung und dynamischen Polymorphismus:
// Basisklasse
class Animal {
public void makeSound() {
System.out.println("Generisches Tiergeräusch");
}
}
// Unterklasse
class Dog extends Animal {
@Override // Überschreiben der Methode
public void makeSound() {
System.out.println("Wuff!");
}
}
// Unterklasse
class Cat extends Animal {
@Override // Überschreiben der Methode
public void makeSound() {
System.out.println("Miau!");
}
}
public class Main {
public static void main(String[] args) {
// Statischer Typ der Variablen Animal, dynamischer Typ des Objekts Dog
Animal myDog = new Dog();
// Statischer Typ der Variablen Animal, dynamischer Typ des Objekts Cat
Animal myCat = new Cat();
// Statischer Typ der Variablen Animal, dynamischer Typ des Objekts Animal
Animal genericAnimal = new Animal();
// Demonstration von Polymorphismus
myDog.makeSound(); // Ruft die Methode aus Dog auf
myCat.makeSound(); // Ruft die Methode aus Cat auf
genericAnimal.makeSound(); // Ruft die Methode aus Animal auf
}
}
In diesem Beispiel erben Dog und Cat von Animal. Die Variablen myDog, myCat und genericAnimal haben den statischen Typ Animal, referenzieren aber Objekte verschiedener dynamischer Typen (Dog, Cat, Animal). Beim Aufruf der Methode makeSound() wird in jeder Referenz die entsprechende Implementierung der Methode ausgeführt, abhängig vom dynamischen Typ des Objekts, was Polymorphismus zur Laufzeit ist.