Vererbung in Java
Baue mit extends einen Kindtyp, der eine auf dem Elternteil geschriebene Methode nutzen kann. Lege horn auf Car, damit beep gedruckt wird. Schreibe class Truck extends Car. In Yard.java erzeugst du einen Truck und rufst t.horn() auf. Kompiliere mit javac Yard.java und starte java Yard. Der Bildschirm soll beep zeigen. Eine zweite Demo baut auch ein einfaches Car, damit du siehst, dass das Elternteil nach dem Kind noch funktioniert. Lass super fuer die naechste Seite. Schreibe horn auf dieser Seite nicht noch einmal auf Truck — Ueberschreiben kommt spaeter.
Ein Kind behaelt eine Elternmethode
Die Pfade-Seite benannte Orte mit Paths.get. Diese Seite startet ein neues Modul: eine Klasse kann Kind einer anderen sein. Oeffne eine Lehrdatei namens Yard.java. Halte den oeffentlichen Klassennamen Yard, damit er zum Dateinamen passt. Loesche uebrige Route-Pfaddemos, Store-Schreiber, Reader-Scanner und Tastatur-Scanner. Das Programm darf nicht auf Tippen warten. Fuer diese Lektion brauchst du keine Importzeile.
Ueber der oeffentlichen Klasse deklarierst du einen package-private Elterntyp:
class Car {
In Car schreibst du eine Instanzmethode void horn(), die beep druckt:
System.out.println("beep");
Dann deklarierst du das Kind:
class Truck extends Car {
Halte den Truck-Koerper auf dieser Seite leer. Das Kind schreibt horn nicht neu. Leere Klammern reichen, um zu sagen, dass Truck eine Art Car ist.
In Yard.main baust du einen Truck und rufst die geerbte Methode auf:
Truck t = new Truck();
t.horn();
Der Aufruf funktioniert, weil extends Car Truck mit Car verbindet. Du hast horn nicht in Truck kopiert.
class Car {
void horn() {
System.out.println("beep");
}
}
class Truck extends Car {
}
public class Yard {
public static void main(String[] args) {
Truck t = new Truck();
t.horn();
}
}
Aus dem Ordner mit Yard.java startest du javac Yard.java. Wenn Klammern und Semikolons passen, schreibt javac keine eigene Zeile. Dann startest du java Yard — nicht java Yard.java. Lass die Endung .java beim Startbefehl weg. Nur eine oeffentliche Klasse steht in dieser Datei, der Dateiname passt zu Yard. Die Hilfstypen Car und Truck bleiben ohne public in dieser Anfaengerform. Drei oeffentliche Klassen in einer Datei wuerden javac ablehnen — behalte die Regel von der Klassenseite.
Der Bildschirm zeigt beep. Geh den Lauf einmal durch. Java startet bei Yard.main. new Truck() baut ein Truck-Objekt. t.horn() findet horn auf dem Elternteil Car durch Vererbung. Die Methode druckt beep. Sagt javac, es finde horn auf Truck nicht, fehlt oder ist falsch geschrieben die Zeile extends Car — setz sie zurueck. Siehst du note.txt oder einen Pfaddruck, startet noch ein Route-Ueberrest — wechsel zu java Yard. Wartet das Terminal auf Eingabe, liegt noch ein Tastatur-Scanner in der Datei — loesche ihn.
Schreibe extends sorgfaeltig. Ein Komma oder ein falsch gesetztes implements gehoert nicht zu dieser Lektion. Vererbung hier ist das Schluesselwort extends zwischen Kind- und Elterntypnamen. Der Kindname kommt zuerst: Truck extends Car, nicht umgekehrt.
Schreibe super auf dieser Seite nicht. Den Elternkonstruktor mit super rufst du in der naechsten Lektion auf. Schreibe auch kein zweites horn in Truck; die Override-Geschichte kommt spaeter. Heute bleibt das Kind leer und nutzt trotzdem die Elternmethode. Der leere Koerper ist absichtliche Lehre, kein Fehler, den du durch Kopieren von horn nach Truck „reparierst“.
📊 Parent and child on this page
| Piece | Role |
|---|---|
| Car | parent type that owns horn |
| Truck | child type via extends Car |
| Yard | public starter with main |
| horn | prints beep; written only on Car |
Das Elternteil funktioniert noch allein
Ein zweites Programm behaelt dieselbe Car, dasselbe leere Truck extends Car und dieselbe oeffentliche Yard. In main baust du sowohl ein Car als auch einen Truck und rufst auf jedem horn auf.
class Car {
void horn() {
System.out.println("beep");
}
}
class Truck extends Car {
}
public class Yard {
public static void main(String[] args) {
Car c = new Car();
Truck t = new Truck();
c.horn();
t.horn();
}
}
Kompiliere mit javac Yard.java, dann starte java Yard. Der Bildschirm zeigt beep, dann noch einmal beep. Die erste Zeile kommt vom einfachen Car. Die zweite vom Truck, der horn geerbt hat. Ein Kind zu machen loescht oder bricht das Elternteil nicht. Beide Objekte koennen denselben Methodenkoerper aufrufen, der einmal auf Car steht. Du baust jedes Objekt selbst mit new; die Zeile extends erzeugt keinen Truck automatisch.
Dieser Kontrast ist der Checkpoint. Vererbung fuegt einem bestehenden Methodenpfad einen Kindpfad hinzu. Du musst das Elternteil nicht entfernen. Entfernst du extends Car von Truck, schlaegt t.horn() beim Kompilieren fehl, weil Truck horn nicht mehr erhaelt. Behalte extends fuer das Lehr-Kind. Nimm die Ein-Truck-Datei, wenn du ein ruhiges beep willst. Nimm die Zwei-Objekt-Datei, wenn du zeigen willst, dass das Elternteil noch antwortet.
Verglichen mit Pfaden auf Route
Auf der Pfade-Seite benannte java Route Ordner und Dateien. Auf dieser Seite verbindet java Yard Typen mit extends. Behalte Route-Dateien nur als Geschichte, wenn sie noch in der Naehe liegen; starte java Yard fuer die Vererbungsdemos, damit der Bildschirm zur Lektion passt.
extends, Wiederverwendung der Elternmethode und ein leerer Kindkoerper sind die neuen Woerter. Du kennst new und Instanzmethoden schon von frueheren OOP-Seiten. Heute treffen diese Teile zum ersten Mal Vererbung auf diesem Kursweg. Behalte die Lehrnamen Car, Truck und Yard, damit Kompilier- und Startbefehle kurz und klar bleiben.
Was diese Seite fuer super offen laesst
Diese Seite zeigt ein Kind, das eine Elternmethode nutzt, ohne super zu schreiben. Die naechste Seite fuehrt super ein, damit ein Kind gezielt zum Elternteil spricht, besonders um Konstruktoren. Bleib hier bei extends und dem geerbten horn-Aufruf. Fuege super() noch nicht als Pflicht zu diesen Yard-Demos hinzu.
Vor super
Du kannst Truck extends Car schreiben, einen Truck bauen und beep von horn sehen. Du kannst auch ein einfaches Car bauen und sehen, dass das Elternteil noch beep druckt. Kompiliere Yard.java und starte java Yard fuer jede behaltene Demo der Reihe nach. Das Kind blieb leer und nutzte trotzdem die Elternmethode. Die naechste Seite ist super, wo das Kind direkter mit dem Elternteil spricht.
Behalte die Ein-Truck-Demo fuer einen klaren geerbten Aufruf. Behalte die Zwei-Objekt-Demo, um zu beweisen, dass das Elternteil allein noch funktioniert. Lass super vorerst von dieser Seite weg. Diese drei Gewohnheiten sind der Checkpoint vor dem Weitergehen. Wenn beep von einem Truck erscheint, der nie sein eigenes horn schrieb, hat Vererbung fuer diese Lektion ihre Arbeit getan und du bist bereit fuer das naechste Thema super.
🧠 Testen Sie Ihr Wissen
Testen Sie Ihr Wissen
Fordern Sie sich mit diesem interaktiven Quiz heraus und sehen Sie, wie gut Sie das Thema verstehen
📝 Anweisungen
- Lesen Sie jede Frage sorgfältig
- Wählen Sie die beste Antwort für jede Frage
- Sie können das Quiz so oft wiederholen, wie Sie möchten
- Ihr Fortschritt wird oben angezeigt