Java-Vererbung
Konzept der Vererbung
Vererbung ist ein Eckpfeiler der objektorientierten Programmiertechnologie von Java, da sie die Erstellung hierarchischer Klassen ermöglicht.
Vererbung bedeutet, dass eine Unterklasse die Eigenschaften und Verhaltensweisen einer Elternklasse erbt, sodass Objekte (Instanzen) der Unterklasse über die Instanzfelder und Methoden der Elternklasse verfügen, oder dass die Unterklasse Methoden von der Elternklasse erbt, wodurch die Unterklasse dieselben Verhaltensweisen wie die Elternklasse erhält.
Vererbung im Alltag:

Kaninchen und Schafe gehören zur Klasse der Pflanzenfresser, während Löwen und Leoparden zur Klasse der Fleischfresser gehören.
Pflanzenfresser und Fleischfresser gehören ebenfalls zur Klasse der Tiere.
Daher ist die Beziehung, die durch Vererbung erfüllt werden muss: is-a. Die Elternklasse ist allgemeiner, und die Unterklasse ist spezifischer.
Obwohl Pflanzenfresser und Fleischfresser beide zu den Tieren gehören, gibt es Unterschiede in ihren Attributen und Verhaltensweisen. Daher hat eine Unterklasse sowohl die allgemeinen Merkmale der Elternklasse als auch ihre eigenen Merkmale.
Format der Klassenvererbung
In Java kann man das Schlüsselwort extends verwenden, um zu deklarieren, dass eine Klasse von einer anderen Klasse erbt. Die allgemeine Form ist wie folgt:
Format der Klassenvererbung
Warum brauchen wir Vererbung?
Als Nächstes veranschaulichen wir diese Notwendigkeit an einem Beispiel.
Entwickeln Sie eine Tierklasse, in der die Tiere ein Pinguin und eine Maus sind, mit den folgenden Anforderungen:
- Pinguin: Attribute (name, id), Methoden (eat, sleep, self-introduction)
- Maus: Attribute (name, id), Methoden (eat, sleep, self-introduction)
Klasse Penguin:
Mouse-Klasse:
An diesen beiden Codeabschnitten lässt sich erkennen, dass der Code dupliziert ist, wodurch der Code groß und aufgebläht wird und die Wartbarkeit gering ist (hauptsächlich weil bei späteren Änderungen viele Teile des Codes geändert werden müssen, was fehleranfällig ist). Um das Problem dieser beiden Codeabschnitte grundlegend zu lösen, ist Vererbung erforderlich. Extrahiere die gemeinsamen Teile der beiden Codeabschnitte, um eine Elternklasse zu bilden:
Gemeinsame Elternklasse:
Diese Animal-Klasse kann als Elternklasse dienen. Nachdem die Klassen Penguin und Mouse von dieser Klasse erben, besitzen sie die Attribute und Methoden der Elternklasse. Die Unterklassen haben keinen doppelten Code mehr, die Wartbarkeit ist verbessert, der Code ist prägnanter und die Wiederverwendbarkeit des Codes ist verbessert (Wiederverwendbarkeit bedeutet hauptsächlich, dass er mehrfach verwendet werden kann, ohne denselben Code erneut zu schreiben). Code nach der Vererbung:
Klasse Penguin:
Mouse-Klasse:
Arten der Vererbung
Beachten Sie, dass Java keine Mehrfachvererbung unterstützt, aber die mehrstufige Vererbung unterstützt.

Merkmale der Vererbung
Eine Unterklasse besitzt alle nicht-privaten Attribute und Methoden der Elternklasse.
Eine Unterklasse kann eigene Attribute und Methoden haben, was bedeutet, dass eine Unterklasse die Elternklasse erweitern kann.
Eine Unterklasse kann die Methoden der Elternklasse auf ihre eigene Weise implementieren.
Die Java-Vererbung ist eine Einfachvererbung, aber mehrstufige Vererbung ist möglich. Einfachvererbung bedeutet, dass eine Unterklasse nur von einer Elternklasse erben kann. Mehrstufige Vererbung bedeutet zum Beispiel, dass Klasse B von Klasse A erbt und Klasse C von Klasse B erbt. Bezogen auf die Beziehungen ist Klasse B die Elternklasse von Klasse C und Klasse A die Elternklasse von Klasse B. Dies ist ein Merkmal, das die Java-Vererbung von der C++-Vererbung unterscheidet.
Sie erhöht die Kopplung zwischen Klassen (ein Nachteil der Vererbung; hohe Kopplung macht die Verbindungen zwischen Code enger und die Code-Unabhängigkeit schwächer).
Vererbungsschlüsselwörter
Vererbung kann mit den beiden Schlüsselwörtern extends und implements implementiert werden. Außerdem erben alle Klassen von java.lang.Object. Wenn eine Klasse diese beiden Vererbungsschlüsselwörter nicht verwendet, erbt sie standardmäßig von Object (diese Klasse ist imjava.lang-Paket, daher ist es nicht nötig,importzu verwenden) Vorfahrenklasse.
extends-Schlüsselwort
In Java ist die Klassenvererbung Einfachvererbung; das heißt, eine Unterklasse kann nur eine Elternklasse haben, daher kann extends nur eine Klasse erben.
extends-Schlüsselwort
implements-Schlüsselwort
Die Verwendung des implements-Schlüsselworts kann Java indirekt die Merkmale der Mehrfachvererbung verleihen. Es wird verwendet, wenn eine Klasse Schnittstellen erbt, und sie kann gleichzeitig mehrere Schnittstellen erben (Schnittstellen werden durch Kommas getrennt).
implements-Schlüsselwort
super- und this-Schlüsselwörter
super-Schlüsselwort:Wir können das super-Schlüsselwort verwenden, um auf Mitglieder der Elternklasse zuzugreifen; es wird verwendet, um auf die Elternklasse des aktuellen Objekts zu verweisen.
this-Schlüsselwort:Eine Referenz auf sich selbst, die auf das aktuelle Objekt verweist, d. h. auf die Objektinstanz, zu der die aktuelle Methode oder der aktuelle Konstruktor gehört.
Beispiel
Das Ausgabeergebnis ist:
animal : eat dog : eat animal : eat
final-Schlüsselwort
final kann verwendet werden, um Variablen (einschließlich Klassenattribute, Objektattribute, lokale Variablen und formale Parameter), Methoden (einschließlich Klassenmethoden und Objektmethoden) und Klassen zu modifizieren.
final bedeutet "final".
Die Verwendung des Schlüsselworts final zum Deklarieren einer Klasse definiert die Klasse als eine finale Klasse, die nicht vererbt werden kann; oder es wird verwendet, um Methoden zu modifizieren, und solche Methoden können nicht von Unterklassen überschrieben werden:
Eine Klasse deklarieren:
final class 类名 {//类体}-
Eine Methode deklarieren:
修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
Hinweis:In einer mit final definierten Klasse sind ihre Attribute und Methoden nicht final.
Konstruktor
Eine Unterklasse erbt nicht den Konstruktor der Elternklasse (Konstruktionsmethode oder Konstruktorfunktion); sie ruft ihn lediglich auf (implizit oder explizit). Wenn der Konstruktor der Elternklasse Parameter hat, dann müssen Sie im Konstruktor der Unterklasse explizit dassuperSchlüsselwort verwenden, um den Konstruktor der Elternklasse mit einer geeigneten Parameterliste aufzurufen.
Wenn der Konstruktor der Elternklasse keine Parameter hat, dann ist es im Konstruktor der Unterklasse nicht nötig, dassuperSchlüsselwort zu verwenden, um den Konstruktor der Elternklasse aufzurufen; das System ruft automatisch den parameterlosen Konstruktor der Elternklasse auf.
Beispiel
Das Ausgabeergebnis ist:
------SubClass 类继承------ SuperClass() SubClass() SuperClass(int n) SubClass(int n): 100 ------SubClass2 类继承------ SuperClass(int n) SubClass2() SuperClass() SubClass2(int n): 200Andere Erweiterungen