MINT lernen

Vererbung

Ein Auto ist ein Fahrzeug, ein Fahrrad auch — warum also alles, was beide können, zweimal programmieren?

1

Oberklasse und Unterklasse

  • Idee:was alle Fahrzeuge haben (name, tempo, beschleunigen(…)), steht nur einmal in der Oberklasse Fahrzeug.
  • extends:public class Auto extends Fahrzeug — die Unterklasse Auto erbt alle Attribute und Methoden und ergänzt eigene.
  • „ist ein“-Test:ein Auto ist ein Fahrzeug → Vererbung passt. Ein Auto hat einen Motor → keine Vererbung, sondern ein Attribut.
  • Diagramm:Pfeil mit hohler Dreiecksspitze von der Unterklasse zur Oberklasse.
  • super(…):der Konstruktor der Unterklasse ruft in seiner ersten Zeile den Konstruktor der Oberklasse auf.
  • Zugriff:private bleibt privat: Auto erbt name, darf aber nur über getName() darauf zugreifen.
Fahrzeug Auto Fahrrad ist ein
Beide Unterklassen erben von Fahrzeug — die hohle Spitze zeigt zur Oberklasse.

Herleitung:

Auto ──▷ Fahrzeug
| Kopf schreiben
Start: im Diagramm zeigt der Pfeil von Auto zu Fahrzeug.
public class Auto extends Fahrzeug {
| neues Attribut
Der Pfeil wird zu extends.
private int sitze;
| Konstruktor
Nur was Fahrzeug noch nicht hat, kommt dazu — name und tempo sind geerbt.
public Auto(String name, int sitze) { super(name); this.sitze = sitze; }
Ergebnis
super(name) reicht den Namen an Fahrzeug weiter, danach setzt Auto sein eigenes Attribut.
2

Methoden überschreiben

  • Überschreiben:die Unterklasse schreibt eine geerbte Methode neu — gleicher Name, gleiche Parameter, gleicher Rückgabetyp.
  • @Override:steht über der neuen Methode. Vertippt (beschreibnug), meldet der Compiler method does not override or implement a method from a supertype.
  • Welche läuft?immer die Methode der Klasse, mit der das Objekt erzeugt wurde: bei new Auto(…) die aus Auto.
  • super.methode():ruft die Version der Oberklasse auf — so ergänzt Fahrrad die alte Beschreibung, statt sie neu zu schreiben.
  • Nur nach unten:ein Auto kann nicht klingeln() — das hat nur Fahrrad: cannot find symbol.

Schiebe die Unterklasse wie eine Folie über die Oberklasse — am Griff, mit dem Regler oder mit den Pfeiltasten. Dann siehst du, was ein Objekt wirklich kann. Rufe Methoden auf: Gelb leuchtet die Implementierung, die tatsächlich läuft.

Was hat die Unterklasse?

Halte fest: Ein Objekt der Unterklasse hat alles aus der Oberklasse (blau) plus das Neue (grün). Bei überschriebenen Methoden (orange) läuft die Version der Unterklasse — außer sie ruft ausdrücklich super.methode() auf.

Merke

Vererbung: class Auto extends Fahrzeug — Auto erbt alle Attribute und Methoden von Fahrzeug, ergänzt eigene und kann Methoden mit @Override überschreiben. Es läuft die Methode der Klasse des Objekts.

3

Allgemeine Hinweise

super zuerst

super(name); muss die erste Zeile im Konstruktor sein, sonst: call to super must be first statement in constructor. Fehlt es ganz, passt kein Konstruktor von Fahrzeug.

Geerbt heißt nicht sichtbar

Schreibt Auto direkt name, meldet der Compiler name has private access in Fahrzeug. Nimm getName().

Erst testen: „ist ein“?

Passt der Satz „Ein … ist ein …“ nicht, ist Vererbung falsch. Ein Fahrrad ist kein Reifen — es hat zwei davon.

Videos