Vererbung & Polymorphie
Vererbung teilt gemeinsames Verhalten: Eine Unterklasse erbt Felder und Methoden und ergänzt Eigenes.
Ansicht
01
Verstehen
Lies die Kernidee und das Beispiel.
02
Prüfen
Beantworte die Aktiv-Checks.
03
Anwenden
Setze die Transferaufgabe um.
Mini-Erfolg
Du hast eine Oberklasse und zwei Unterklassen mit eigener fahre()-Ausgabe gebaut.
Warum das wichtig ist: Vererbung hilft, wenn Dinge wirklich zusammengehören. Falsch eingesetzt wird sie schnell zur Falle.
Vorher hilfreich
Lerninhalt
Verstehen & anwenden
extends und super
extends macht eine Klasse zur Unterklasse einer anderen.
super(...) ruft den Konstruktor der Elternklasse auf und steht als erste Anweisung im Konstruktor.
public class Fahrzeug {
protected int tempo;
public void fahre() {
System.out.println("Faehrt mit " + tempo);
}
}
public class Auto extends Fahrzeug {
public Auto() {
this.tempo = 120;
}
}Überschreiben
@Override markiert eine Methode, die Verhalten der Elternklasse ersetzt.
Der Compiler prüft die Signatur.
Polymorphie: Eine Fahrzeug-Variable kann ein Auto halten — aufgerufen wird die Auto-Version der Methode.
public class Auto extends Fahrzeug {
@Override
public void fahre() {
System.out.println("Auto fährt auf der Straße");
}
}
Fahrzeug f = new Auto();
f.fahre(); // "Auto fährt auf der Straße"Grenzen der Vererbung
Java erlaubt nur eine direkte Elternklasse.
Für mehrere Verträge gibt es Interfaces.
Tiefe Vererbungshierarchien werden schnell unübersichtlich — Komposition ist oft die bessere Wahl.
Vertiefung
Vererbung ist eine enge Beziehung
Vererbung bedeutet „ist ein“: Ein Auto ist ein Fahrzeug. Wenn diese Beziehung nicht stimmt, ist Vererbung meist die falsche Wahl. Komposition („hat ein“) ist oft flexibler.
Polymorphie wirkt über den Referenztyp: Eine Fahrzeug-Variable kann ein Auto halten. Aufgerufen wird trotzdem die überschriebene Methode des konkreten Objekts.
Fahrzeug f = new Auto();
f.fahre(); // Auto-Version wird ausgeführt
List<Fahrzeug> flotte = List.of(new Auto(), new Fahrrad());
for (Fahrzeug fahrzeug : flotte) {
fahrzeug.fahre();
}Merksatz: Vererbung nur bei echter „ist ein“-Beziehung. Polymorphie macht Sammlungen unterschiedlicher Unterklassen gemeinsam nutzbar.
Übungsaufgabe
Fahrzeug-Flotte
Baue Fahrzeug als Oberklasse sowie Auto und Fahrrad als Unterklassen. Jede Klasse überschreibt fahre().
Das soll dein Programm können
- Oberklasse Fahrzeug mit fahre()
- Zwei Unterklassen mit @Override
- Eine List<Fahrzeug> mit beiden Typen
- Schleife, die für jedes Fahrzeug fahre() aufruft
Schreibe den Code hier oder in deiner IDE und vergleiche ihn dann mit der Lösung.
Dein Code wird automatisch auf diesem Gerät gespeichert.
Hinweis anzeigen
Erweitere mit class Auto extends Fahrzeug. Für die Liste kannst du List.of(new Auto(), new Fahrrad()) verwenden.
Lösung anzeigen
import java.util.List;
class Fahrzeug {
public void fahre() { System.out.println("Ein Fahrzeug fährt."); }
}
class Auto extends Fahrzeug {
@Override
public void fahre() { System.out.println("Das Auto fährt auf der Straße."); }
}
class Fahrrad extends Fahrzeug {
@Override
public void fahre() { System.out.println("Das Fahrrad fährt auf dem Radweg."); }
}
public class Flotte {
public static void main(String[] args) {
List<Fahrzeug> flotte = List.of(new Auto(), new Fahrrad());
for (Fahrzeug fahrzeug : flotte) {
fahrzeug.fahre();
}
}
}Warum funktioniert das?
Die Schleife kennt nur Fahrzeug. Trotzdem wird die passende Unterklassen-Version aufgerufen — das ist dynamische Bindung.
Aktiv-Check
Teste dein Verständnis
Erkennen: Welcher Abschnitt passt?
Welcher Abschnitt passt zu diesen Begriffen?
Spaßprojekt
Fahrzeug-Flotte
Baue Fahrzeug als Oberklasse sowie Auto und Fahrrad als Unterklassen. Speichere alle in einem Array und rufe bei jedem fahre() auf.
Selbstcheck
Kann ich das schon?
Hake ab, was du wirklich erklären oder selbst bauen könntest.
Fortschritt
Bereit zum Abschließen?
Markiere die Lektion als abgeschlossen, um XP und Streak zu erhalten.