ENTDECKEN – Vererbung in Java
Bei einer Vererbung in Java wird zwischen einer Super- und einer Subklasse (auch Ober- und Unterklasse genannt) unterschieden. Die Superklasse ist in der Regel eine Zusammenfassung von allgemeinen Attributen (Instanzvariablen) und Methoden unterschiedlicher aber ähnlicher Objekte.
Die Subklasse bekommt von ihrer Superklasse sämtliche Attribute und Methoden vererbt (als wären sie in der Subklasse deklariert). Typischerweise wird die Subklasse um eigene Attribute und Methoden erweitert. Man spricht hier von einer Spezialisierung der Subklasse von der Superklasse. Eine Vererbung in Java findet über das Schlüsselwort extends statt.
Die Klasse Vehicle besitzt Attribute (Instanzvariablen) die auf alle Arten von Fahrzeugen anwendbar sind (noTires, id). Die Klassen Car und Bike erben alle Attribute der Klasse Vehicle. Wir fassen alle Klassen im Kontext der Fahrzeuge in einem Paket vehicles zusammen.
Die Methode toString() verwendet eine Methode getVehicleType(), die in allen Subklassen überschrieben wird, und kann somit den richtigen Typ für jedes Fahrzeug bei der textuellen Repräsentation voranstellen.
Superklasse Vehicle

Die Klasse Car ist eine Subklasse der Klasse Vehicle (Car extends Vehicle), und verfügt somit auch über deren Attribute noTires und id.
Im Konstruktor der Klasse Car wird mittels super(id, 4) der Konstruktor der Superklasse Vehicle aufgerufen (der super Aufruf muss immer die erste Anweisung sein). Diesem wird die Variable id übergeben, sowie 4 für die Variable noTires (wir nehmen an, dass in unserem Beispiel alle Autos 4 Reifen haben).
Zusätzlich zu den bereits geerbten Attributen der Superklasse können in der Subklasse weitere Attribute definiert werden. Im Fall von Car sind dies die Attribute manufacturer und model.
Subklasse Car

Neben der Klasse Car kann eine weitere Subklasse der Klasse Vehicle (Bike extends Vehicle) definiert werden. In Java kann man durch Vererbung eine Klassenhierarchie bilden.
Die Klasse Bike unterscheidet sich insofern von Car, dass sie zwar die Attribute der Superklasse vererbt bekommt (id, noTires), jedoch andere zusätzliche Elemente besitzt: type und noGears anstatt manufacturer und model.
Geerbte Attribute und Methoden werden unverändert übernommen. Man kann geerbte Methoden in Java aber auch überschreiben, d.h. mit gleicher Schnittstelle neu deklarieren, und somit eine eigene Version der Methode implementieren. Die geerbte Methode wird somit ersetzt.
Die toString Methode der Klasse Vehicle wird in der Klasse Bike überschrieben. Dabei wird auf eine Methode der Superklasse zugegriffen: mittels super.toString() kann die toString-Methode der Klasse Vehicle aufgerufen werden.
Klasse Bike

In der Test-Klasse VehiclesTest werden nun alle vorher definierten Klassen verwendet: Variablen vom Typ Vehicle können sowohl Objekte vom Typ Car (siehe v1), als auch Objekte vom Typ Bike (siehe v5) zugewiesen werden.
Methoden, die in der Klasse Vehicle als public markiert sind, können auch von Objekten einer Subklasse aufgerufen werden. Zum Beispiel, car3.setId(..) ruft die setter-Methode der Instanzvariable id auf, die in Vehicle definiert wurde.
Klasse VehiclesTest

Ausgabe

Teste nun das fertig implementiere Programm im kooperativen Online-Editor repl.it: