Zuletzt aktualisiert am 05.12.2025 4 Minuten Lesezeit

Vererbung

Vererbung (englisch: Inheritance) ist eines der vier Grundprinzipien der objektorientierten Programmierung (OOP). Sie ermöglicht es, neue Klassen auf Basis bereits existierender Klassen zu erstellen. Die abgeleitete Klasse (Kindklasse) übernimmt dabei automatisch alle Eigenschaften und Methoden der Basisklasse (Elternklasse) und kann diese erweitern oder anpassen.

Grundkonzept der Vererbung

Vererbungstyp Beschreibung Unterstützt von
Einfache Vererbung Eine Klasse erbt von genau einer Basisklasse Java, C#, PHP
Mehrfachvererbung Eine Klasse kann von mehreren Basisklassen erben C++, Python
Interface-Vererbung Klassen können mehrere Interfaces implementieren Java, C#, TypeScript

Java und C# erlauben keine direkte Mehrfachvererbung von Klassen, da dies zu Konflikten führen kann (das sogenannte Diamond-Problem). Stattdessen können Klassen mehrere Interfaces implementieren, um ähnliche Flexibilität zu erreichen.

Zugriffsmodifikatoren und Vererbung

Die Sichtbarkeit von Attributen und Methoden beeinflusst, was eine Kindklasse erben und nutzen kann:

Modifikator Zugriff in Kindklasse Zugriff von außen
public Ja Ja
protected Ja Nein
private Nein Nein

Der Modifikator protected ist besonders bei Vererbung nützlich: Attribute sind für Kindklassen zugänglich, aber von außerhalb der Klassenhierarchie nicht sichtbar.

Vererbung und die anderen OOP-Prinzipien

Vererbung ist eng mit den anderen Grundprinzipien der OOP verknüpft:

  • Kapselung: Basisklassen kapseln gemeinsame Funktionalität und schützen interne Daten durch Zugriffsmodifikatoren.
  • Polymorphie: Durch Überschreiben von Methoden können abgeleitete Klassen unterschiedliche Verhaltensweisen zeigen, obwohl sie den gleichen Typ haben.
  • Abstraktion: Abstrakte Klassen definieren Schnittstellen, die von Kindklassen implementiert werden müssen.

Best Practices

Bei der Verwendung von Vererbung solltest du einige Grundsätze beachten:

  • "Ist-ein"-Beziehung prüfen: Vererbung sollte nur verwendet werden, wenn eine echte "ist-ein"-Beziehung besteht. Ein Hund "ist ein" Tier - das passt. Ein Auto "hat ein" Motor - hier wäre Komposition besser.
  • Vererbungshierarchie flach halten: Tiefe Hierarchien mit vielen Ebenen werden schnell unübersichtlich und schwer wartbar.
  • Komposition vor Vererbung: Oft ist es flexibler, Objekte zu kombinieren, anstatt von ihnen zu erben.
  • Liskovsches Substitutionsprinzip: Objekte einer Kindklasse müssen überall einsetzbar sein, wo Objekte der Elternklasse erwartet werden.

Vererbung in der Praxis

Vererbung ist ein zentrales Konzept, das dir in vielen Bereichen der Softwareentwicklung begegnet:

  • GUI-Frameworks: Buttons, Textfelder und Labels erben von einer gemeinsamen Basis-Widget-Klasse
  • Spieleentwicklung: Verschiedene Spielfiguren erben von einer Character-Basisklasse
  • Web-Frameworks: Controller und Services erben oft von abstrakten Basisklassen
  • Datenbankzugriff: ORM-Frameworks nutzen Vererbung für Entity-Klassen

Wer als Fachinformatiker für Anwendungsentwicklung arbeitet, wird Vererbung regelmäßig einsetzen - sei es bei der Entwicklung eigener Klassenhierarchien oder bei der Arbeit mit bestehenden Frameworks.

Quellen und weiterführende Links

Überschreiben von Methoden

Eine wichtige Eigenschaft der Vererbung ist das Überschreiben (Override) von Methoden. Eine Kindklasse kann eine geerbte Methode neu implementieren, um ein anderes Verhalten zu definieren. Dies ist die Grundlage für Polymorphie.

public class Tier {
    public void lautGeben() {
        System.out.println("Das Tier macht ein Geräusch.");
    }
}

public class Katze extends Tier {
    @Override
    public void lautGeben() {
        System.out.println("Miau!");
    }
}

public class Hund extends Tier {
    @Override
    public void lautGeben() {
        System.out.println("Wuff!");
    }
}

Durch das Überschreiben verhalten sich Katze und Hund unterschiedlich, obwohl beide von Tier erben. Die Annotation @Override in Java signalisiert dem Compiler, dass eine Methode überschrieben wird.

Generalisierung und Spezialisierung

Bei der Vererbung unterscheidet man zwei Denkrichtungen:

Generalisierung (Bottom-Up)

Bei der Generalisierung analysiert man bestehende Klassen und extrahiert gemeinsame Eigenschaften in eine neue Oberklasse. Wenn du beispielsweise die Klassen Hund, Katze und Vogel hast, erkennst du gemeinsame Attribute wie name, alter und Methoden wie fressen(). Diese fasst du in einer Oberklasse Tier zusammen.

Spezialisierung (Top-Down)

Bei der Spezialisierung startest du mit einer allgemeinen Klasse und leitest speziellere Varianten ab. Aus der Klasse Fahrzeug entstehen die spezialisierten Klassen Auto, Motorrad und LKW, die jeweils eigene Attribute und Methoden hinzufügen.

Einfache vs. Mehrfachvererbung

Je nach Programmiersprache gibt es unterschiedliche Vererbungsmodelle: