Java-Vererbung meistern: Konzepte, Typen und praktische Beispiele
Java-Vererbung meistern
Erkunden Sie Java-Vererbung in der Tiefe – verstehen Sie ihre Prinzipien, reale Beispiele und wie Sie sie für sauberen, wiederverwendbaren Code anwenden.
Vererbung ist ein Eckpfeiler der objektorientierten Programmierung, der es ermöglicht, eine neue Klasse basierend auf einer bestehenden zu erstellen.
Die abgeleitete Klasse heißt Unterklasse (Kind oder abgeleitet), während die Klasse, die sie erweitert, die Oberklasse (Eltern- oder Basisklasse) ist. Das Schlüsselwort extends stellt diese Beziehung her.
class Tier { // Methoden und Felder } class Hund extends Tier { // Hund erbt Felder und Methoden von Tier }
Hier erbt Hund alle Member von Tier – die Unterklasse erhält die Funktionalität des Elternteils.
Beispiel 1: Grundlegende Vererbung
class Tier { String name; public void essen() { System.out.println("Ich kann essen"); } } class Hund extends Tier { public void anzeigen() { System.out.println("Mein Name ist " + name); } } class Haupt { public static void main(String[] args) { Hund labrador = new Hund(); labrador.name = "Rohu"; labrador.anzeigen(); labrador.essen(); } }
Ausgabe:
Mein Name ist Rohu Ich kann essen
In diesem Beispiel erbt Hund name und essen() von Tier, sodass ein Hund-Objekt direkt darauf zugreifen kann.

Die ist-ein-Beziehung
Vererbung in Java stellt eine ist-ein-Beziehung dar: Eine Unterklasse ist eine spezialisierte Form ihrer Oberklasse.
- Auto ist ein Fahrzeug
- Orange ist eine Frucht
- Chirurg ist ein Arzt
- Hund ist ein Tier
Diese natürlichen Hierarchien rechtfertigen den Einsatz von Vererbung.
Methodenüberschreibung
Wenn eine Unterklasse eine Methode mit derselben Signatur wie ihre Oberklasse definiert, überschreibt die Unterklassen-Methode die Version der Oberklasse. Dies ermöglicht Laufzeit-Polymorphie.
Beispiel 2: essen() überschreiben
class Tier { public void essen() { System.out.println("Ich kann essen"); } } class Hund extends Tier { @Override public void essen() { System.out.println("Ich esse Hundefutter"); } public void bellen() { System.out.println("Ich kann bellen"); } } class Haupt { public static void main(String[] args) { Hund labrador = new Hund(); labrador.essen(); labrador.bellen(); } }
Ausgabe:
Ich esse Hundefutter Ich kann bellen
Der essen()-Aufruf auf labrador wird zur überschriebenen Methode in Hund aufgelöst.
Tipp: Die @Override-Annotation ist optional, aber dringend empfohlen – sie stellt sicher, dass der Compiler prüft, dass Sie tatsächlich eine Methode überschreiben.
super verwenden, um auf die Oberklasse zuzugreifen
Beim Überschreiben ermöglicht das super-Schlüsselwort den Aufruf der Eltern-Implementierung.
Beispiel 3: super in essen()
class Tier { public void essen() { System.out.println("Ich kann essen"); } } class Hund extends Tier { @Override public void essen() { super.essen(); System.out.println("Ich esse Hundefutter"); } public void bellen() { System.out.println("Ich kann bellen"); } } class Haupt { public static void main(String[] args) { Hund labrador = new Hund(); labrador.essen(); labrador.bellen(); } }
Ausgabe:
Ich kann essen Ich esse Hundefutter Ich kann bellen
Hier ruft super.essen() die in Tier definierte Methode auf, bevor die Logik der Unterklasse ausgeführt wird.
Ebenso kann super Oberklassen-Konstruktoren aufrufen.
Protected-Member in der Vererbung
Als protected markierte Felder oder Methoden sind für Unterklassen unabhängig vom Paket zugänglich.
Beispiel 4: Auf Protected-Member zugreifen
class Tier { protected String name; protected void anzeigen() { System.out.println("Ich bin ein Tier."); } } class Hund extends Tier { public void infoAbrufen() { System.out.println("Mein Name ist " + name); } } class Haupt { public static void main(String[] args) { Hund labrador = new Hund(); labrador.name = "Rocky"; labrador.anzeigen(); labrador.infoAbrufen(); } }
Ausgabe:
Ich bin ein Tier. Mein Name ist Rocky
Die Unterklasse kann das protected Feld name frei lesen und modifizieren und anzeigen() aufrufen.
Warum Vererbung verwenden?
- Code-Wiederverwendung: Eine Kindklasse erbt automatisch alle public- und protected-Member ihres Elternteils.
- Polymorphie: Überschreiben ermöglicht dynamische Methodenauswahl, ein Schlüsselfeature der Laufzeit-Polymorphie.
Typen der Vererbung
Java unterstützt fünf konzeptionelle Vererbungsmodelle – jedes in unterschiedlichen Szenarien nützlich.
1. Einfache Vererbung
Eine Klasse erweitert nur eine Oberklasse.

2. Mehrstufige Vererbung
Eine Unterklasse wird zur Oberklasse einer anderen Klasse, was eine Kette bildet.

3. Hierarchische Vererbung
Mehrere Unterklassen erben von einer einzelnen Oberklasse.

4. Mehrfache Vererbung
Java erlaubt nicht, dass eine Klasse mehr als eine Klasse erweitert, aber Schnittstellen bieten einen Weg, dieses Muster zu erreichen.

Hinweis: Mehrfache Vererbung kann über Schnittstellen implementiert werden; siehe Java implements multiple inheritance.
5. Hybrid-Vererbung
Eine Mischung aus zwei oder mehr Vererbungstypen – zum Beispiel Kombination aus hierarchischer und mehrfacher Vererbung.

Java
- Javas final-Schlüsselwort verstehen: Variablen, Methoden und Klassen
- Java instanceof-Operator: Ein umfassender Leitfaden
- Java statische verschachtelte Klassen verstehen: Nutzung, Unterschiede und Beispiele
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Singleton-Pattern erklärt: Sichere Implementierung und Verwendung
- Java Reflection meistern: Klassen, Methoden und Felder zur Laufzeit inspizieren
- Java ObjectOutputStream meistern: Serialisierung, Methoden und praktische Beispiele
- Java Generics meistern – Wiederverwendbaren, typsicheren Code erstellen
- Java-Dateioperationen mit java.io meistern – Erstellen, Lesen, Schreiben & Löschen
- C# Vererbung: Wiederverwendbaren & wartbaren Code erstellen