Vererbung

Spricht man von Objektorientierung, dann fällt früher oder später der Begriff „Vererbung“. Und genau darum soll es in diesem Teil des Kurses gehen. In der Programmierung ist die Vererbung die Weitergabe von Attributen und Methoden von einer Klasse an die nächste. Lass und nochmal an das T-Shirt Beispiel denken. Diesem T-Shirt haben wir schon ein paar Attribute zugesprochen: Farbe, Marke, etc. Gehen wir nun eine Ebene höher könnte man ein T-Shirt als ein Kleidungsstück betiteln, dabei ist jedes T-Shirt ein Kleidungsstück, aber nicht jedes Kleidungsstück ein T-Shirt. Die Klasse Kleidungsstück hat nun bestimmte Attribute, zum Beispiel eine Farbe, eine Jahreszeit und eine Marke. Ein T-Shirt teilt diese Attribute, allerdings hat ein T-Shirt weitere zusätzliche Attribute. Das könnte Beispielsweise die Option sein, ein Polo Shirt zu sein. Schauen wir uns die beiden Klassen im Code an:
public class Kleidungsstueck {
  String farbe;
  String jahreszeit;
  String marke;

  public Kleidungsstueck(String farbe, String marke, String jahreszeit) {
    this.farbe = farbe;
    this.marke = marke;
    this.jahreszeit = jahreszeit;
  }
}

public class TShirt extends Kleidungsstueck {
  boolean istPoloShirt;

  public TShirt(String farbe, String marke, String jahreszeit, boolean istPoloShirt) {
    super(farbe, marke, jahreszeit);
    this.istPoloShirt = istPoloShirt;
  }
}

// Listing 10.1 Vererbung von Klassen
In der Klasse KleidungsstueckKleidungsstueck ist nichts ungewohntes zu finden: Zunächst werden die Attribute definiert, danach wird ein Konstruktor erstellt, welcher die Attribute entsprechend zuweist. Die Klasse TShirtTShirt hat allerdings einige Neuerungen bekommen. Die erste Änderung ist die, dass die Klassendefinition um den Zusatz extendsKleidungsstueckextends Kleidungsstueck ergänzt wurde. Damit Teilen wir der TShirt-Klasse mit, dass sie nun von KleidungsstueckKleidungsstueck erbt. Damit hat die Klasse TShirtTShirt Zugriff auf alle Methoden und Attribute der Klasse KleidungsstueckKleidungsstueck. Danach wird innerhalb der KlasseKlasse TShirt das Attribut istPoloShirtistPoloShirt ergänzt. Die Klasse besitzt ebenfalls einen Konstruktor, hier findet sich auch die nächste Neuerung. Der Konstruktor erwartet alle Parameter, welche auch der Konstruktor aus der Klasse KleidungsstueckKleidungsstueck benötigt und zusätzlich die eigenen Attribute aus TShirt. Die letzte wichtige Änderung ist der Aufruf von super()super(…). Dieser macht nichts weiter, als den Konstruktor der Super-Klasse (also die Klasse von der geerbt wird) aufzurufen, deshalb müssen wir auch die geforderten Parameter des Kleidungsstueck-Konstruktors an den super Aufruf übergeben.

Das war es auch schon, du kannst nun eine Instanz der Klasse TShirtTShirt erstellen und sie besitzt sowohl die Attribute aus KleidungsstueckKleidungsstueck, als auch das eigene Attribut istPoloShirtistPoloShirt.

TShirt poloShirt = new TShirt("Rot", "Beispielmarke", "Sommer", true);
System.out.println("Farbe: " + poloShirt.farbe + ", Polo Shirt: " + poloShirt.istPoloShirt);

Ausgabe: Farbe: Rot, Polo Shirt: true

// Listing 10.2 Zugriff auf geerbte Attribute
Wie du siehst kannst du auf die Attribute von KleidungsstueckKleidungsstueck zugreifen, als wären sie Teil der TShirtTShirt Klasse. Auch Methoden kannst du nach genau diesem Prinzip vererben. In der Aufgabe zu dem Teil kannst du dich daran ausprobieren.

Zusammenfassung

  • Die Vererbung ermöglicht die Weitergabe von Attributen und Methoden an Unterklassen
  • Diese Unterklassen können dann um weitere Attribute und Methoden ergänzt werden
  • Vererbung kommt vor allem dann zum Einsatz, wenn etwas zunächst unspezifisch definiert werden soll und später genauere Eigenschaften erhält. (z.B.: Fahrzeug -> Auto; Kleidungsstueck -> T-Shirt; Tier -> Vierbeinder-> Hund)
Kommentieren Kommentare