Vererbung ist ein zentrales Konzept in der objektorientierten Programmierung (OOP) und wird häufig als einer der Bausteine zur Effizienzsteigerung betrachtet. In diesem Tutorial vertiefst du dein Verständnis für Vererbung in Java. Du wirst lernen, wie du mit Zugriffsmodifikatoren umgehst, Konstruktoren verwendest und welche Rolle die Kapselung in der Vererbung spielt.
Wichtigste Erkenntnisse
- Vererbung ermöglicht das Erben von Eigenschaften und Methoden einer Klasse.
- Der Zugriffsmodifikator private schränkt den Zugriff auf die Variablen oder Methoden ein, während protected einen erweiterten Zugang innerhalb von Klassen ermöglicht, die von der ursprünglichen Klasse erben.
- Konstruktoren müssen in der Unterklasse aufgerufen werden, um Objekte korrekt zu instanziieren.
- Interface-Methoden können generalisiert verwendet werden, wenn man mehrere spezifische Klassen hat.
Schritt-für-Schritt-Anleitung
Zugriffsmodifikatoren: protected vs. private
Wenn du in einer Klasse wie Fahrzeug eine Variable (z. B. Farbe) als protected deklarierst, dann kannst du diese Variable in einer abgeleiteten Klasse (z. B. Auto) direkt verwenden. Wenn du die Variable jedoch als private deklarierst, kannst du in der Unterklasse nicht direkt auf sie zugreifen.

Das bedeutet konkret, dass ein Zugriff auf private-Variablen nur über Setter und Getter möglich ist.
Das Beispiel zeigt, dass wir setFarbe und getFarbe verwenden müssen, um auf die private Variable farbe zuzugreifen.

Wenn die Variable als protected deklariert ist, kannst du einfach innerhalb der Auto-Klasse darauf zugreifen und den Wert ändern.
Verwendung von Konstruktoren in der Vererbung
Bei der Definition einer Unterklasse musst du sicherstellen, dass der Konstruktor der Oberklasse korrekt aufgerufen wird.

Das stellt sicher, dass die Farbe beim Erstellen eines Auto-Objekts richtig initialisiert wird.

Achte darauf, dass du in der Unterklasse einen Konstruktor definierst, der die Parameter der Oberklasse angemessen übergibt.
Erben und Methodenaufrufe
Zwei Klassen, Fahrzeug und Auto, ermöglichen dir die Verwendung von allgemeinen Variablen und Methoden. Wenn du eine Methode in Fahrzeug definierst, kannst du diese Methode auch in Auto verwenden, ohne sie erneut zu schreiben.

Hier wird die Methode fahrzeugFarbeAusgeben aufgerufen und gibt den Farbwert aus, der durch die getFarbe-Methode bereitgestellt wird.
Einschränkungen beim Zugriff auf Methoden
Wenn du versuchst, eine Methode in einer Unterklasse aufzurufen, die nicht für die Klasse verfügbar ist, erhältst du einen Kompilierungsfehler. In unserem Beispiel muss ein Fahrzeug-Objekt übergeben werden, um die Methode getFarbe aufzurufen.

Das bedeutet praktisch, dass du sicherstellen musst, dass die Methode zu deinem Datentyp passt, bevor du sie aufrufst. Du kannst also ein Fahrrad, ein Auto oder beides an eine Methode übergeben, die lediglich Fahrzeug-Objekte erwartet.
Beispiel für den Aufruf von Instanzmethoden in statischen Kontexten
Beachte, dass in statischen Methoden (static) das this-Keyword nicht verwendet werden kann, da es sich nicht auf eine spezifische Instanz bezieht. In solchen Fällen solltest du möglicherweise eine andere Methode verwenden oder die Logik umstrukturieren.

Durch diesen Aufruf wird die Farbe für das meinAuto-Objekt korrekt ausgegeben.
Zusammenfassung - Vererbung in Java: Ein Leitfaden für Einsteiger
Vererbung ist ein wichtiges Konzept in der Programmierung mit Java, das dir hilft, den Code zu modularisieren und wiederzuverwenden. In diesem Tutorial hast du die Grundlagen von Zugriffsmodifikatoren, Konstruktoren und Methodenaufrufen in Bezug auf Vererbung kennengelernt.
Häufig gestellte Fragen
Wie kann ich auf private Variablen in der Unterklasse zugreifen?Auf private Variablen in der Unterklasse kann nicht direkt zugegriffen werden. Benutze Getter- und Setter-Methoden.
Was ist der Unterschied zwischen protected und private?protected erlaubt den Zugriff in der Unterklasse und im selben Paket, während private nur innerhalb der eigenen Klasse zugänglich ist.
Muss ich die Konstruktoren in der Unterklasse definieren?Ja, wenn du den Konstruktor der Oberklasse angepasst hast, musst du auch die Konstruktoren in der Unterklasse entsprechend definieren.
Kann ich Methoden von Oberklassen in Unterklassen frei überschreiben?Ja, du kannst Methoden, die nicht mit final oder static gekennzeichnet sind, in der Unterklasse überschreiben, um spezifisches Verhalten zu implementieren.