Zuletzt aktualisiert am 04.12.2025 4 Minuten Lesezeit

Vererbung

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

Grundkonzept der Vererbung

Vererbungstyp Beschreibung Unterstuetzt 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 koennen mehrere Interfaces implementieren Java, C#, TypeScript

Java und C# erlauben keine direkte Mehrfachvererbung von Klassen, da dies zu Konflikten fuehren kann (das sogenannte Diamond-Problem). Stattdessen koennen Klassen mehrere Interfaces implementieren, um aehnliche Flexibilitaet 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 aussen
public Ja Ja
protected Ja Nein
private Nein Nein

Der Modifikator protected ist besonders bei Vererbung nuetzlich: Attribute sind fuer Kindklassen zugaenglich, aber von ausserhalb der Klassenhierarchie nicht sichtbar.

Vererbung und die anderen OOP-Prinzipien

Vererbung ist eng mit den anderen Grundprinzipien der OOP verknuepft:

  • Kapselung: Basisklassen kapseln gemeinsame Funktionalitaet und schuetzen interne Daten durch Zugriffsmodifikatoren.
  • Polymorphie: Durch Ueberschreiben von Methoden koennen abgeleitete Klassen unterschiedliche Verhaltensweisen zeigen, obwohl sie den gleichen Typ haben.
  • Abstraktion: Abstrakte Klassen definieren Schnittstellen, die von Kindklassen implementiert werden muessen.

Best Practices

Bei der Verwendung von Vererbung solltest du einige Grundsaetze beachten:

  • "Ist-ein"-Beziehung pruefen: 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 waere Komposition besser.
  • Vererbungshierarchie flach halten: Tiefe Hierarchien mit vielen Ebenen werden schnell unuebersichtlich und schwer wartbar.
  • Komposition vor Vererbung: Oft ist es flexibler, Objekte zu kombinieren, anstatt von ihnen zu erben.
  • Liskovsches Substitutionsprinzip: Objekte einer Kindklasse muessen ueberall 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 fuer Entity-Klassen

Wer als Fachinformatiker fuer Anwendungsentwicklung arbeitet, wird Vererbung regelmaessig einsetzen - sei es bei der Entwicklung eigener Klassenhierarchien oder bei der Arbeit mit bestehenden Frameworks.

Quellen und weiterfuehrende Links

Ueberschreiben von Methoden

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

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

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 Ueberschreiben verhalten sich Katze und Hund unterschiedlich, obwohl beide von Tier erben. Die Annotation @Override in Java signalisiert dem Compiler, dass eine Methode ueberschrieben 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 hinzufuegen.

Einfache vs. Mehrfachvererbung

Je nach Programmiersprache gibt es unterschiedliche Vererbungsmodelle: