Dieser Artikel beschreibt die Vererbung von java-objektorientiertem Programmieren. Teilen Sie es für Ihre Referenz wie folgt weiter:
Vererbung: Eine spezielle Klasse hat alle Eigenschaften und Verhalten einer allgemeinen Klasse.
Erbschaftsvorteile:
1. Verbesserte Code -Wiederverwendbarkeit
2. Lassen Sie die Klasse zuvor eine Beziehung zur Klasse haben, und nur mit dieser Beziehung kann es polymorphe Eigenschaften geben. Vererbung ist die Beziehung zwischen einer Klasse und einer Klasse zuvor.
Anmerkungen:
1.Java unterstützt nur eine einzelne Erbschaft, nicht die multiple Vererbung. Da multiple Vererbung Sicherheitsrisiken aufweist: Wenn mehrere übergeordnete Klassen dieselbe Funktion definieren, die Funktionen jedoch unterschiedlich sind, weiß die Unterklasse nicht, welche sie ausführen sollen.
2. Wenn eine untergeordnete Klasse die übergeordnete Klasse erbt, erbt sie alle Methoden und Eigenschaften der übergeordneten Klasse und kann direkt verwendet werden.
3. Java unterstützt mehrschichtige Erbschaft, dh die Beziehung zwischen Enkelsotersos-Vater
Grammatik:
[Klassenmodifikator] Klasse Unterklasse erweitert den übergeordneten Klassennamen {Anweisung;}Zum Beispiel:
Klasse pserson {int age; Zeichenfolge Name; public void speak () {System.out.println ("Hallo Welt!"); }} // Erben Sie die Personklasse, erben Sie alle Methoden und Attribute der Elternklassenschülerin. }} // Erben Sie die Personklasse, erben Sie alle Methoden und Attribute des übergeordneten Klassenarbeiters. }}So verwenden Sie Funktionen in einem Vererbungssystem (siehe API -Dokumentation):
Überprüfen Sie die Funktionen der übergeordneten Klasse und erstellen Sie Unterklassenobjekte, um Funktionen zu verwenden
Diese drei Szenarien werden während des Erbschaftsprozesses häufig auftreten:
1) Variable mit demselben Namen
1. Wenn eine Unterklasse eine gleichnamige nicht private Mitgliedsvariable hat, greift die Unterklasse auf die Variable dieser Klasse zu und verwendet dies. Die Unterklasse greift in der übergeordneten Klasse auf die gleichnamige Variable zu und verwendet Super.
2. Dies ist ein Verweis auf das Objekt dieser Klasse
3.Uper stellt einen Verweis auf das übergeordnete Klassenobjekt dar (die Verwendung ist dieselbe wie diese)
2) Funktionen mit demselben Namen
1. Wenn eine Unterklasse eine Funktion der übergeordnete Klasse genau wie die übergeordnete Klasse erscheint (der Funktionsname und die Parameter sind gleich), wird der Unterklassen -Funktionsinhalt ausgeführt, wenn das Subklassenobjekt die Funktion aufruft. Die Funktionen der übergeordneten Klasse werden überschrieben (auch umschreiben).
2. Schreiben Sie die Definition neu: Wenn die Unterklasse die übergeordnete Klasse erbt, den Funktionen der übergeordneten Klasse folgt und die Unterklasse eingibt. Obwohl die Unterklasse diese Funktion hat, ist der Inhalt der Funktion nicht mit der übergeordneten Klasse überein. Zu diesem Zeitpunkt müssen keine neue Funktion definiert werden, sondern die Überschreibungsfunktion verwenden, die Funktionsdefinition der übergeordneten Klasse behalten und den Funktionsinhalt neu schreiben.
3. Anmerkungen zum Umschreiben (Überschreiben):
<1> Unterklassen überschreiben übergeordnete Klasse. Sie müssen sicherstellen, dass die Berechtigungen der untergeordneten Klasse größer oder gleich den Berechtigungen der übergeordneten Klasse vor der Vererbung sind, andernfalls schlägt die Zusammenstellung fehl. (public> nicht rhetorische Schlüsselwörter> privat schreiben)
<2> statisch kann nur statisch abdecken
<3> Überlastung: Schauen Sie sich nur die Parameterliste der Funktion mit demselben Namen an und schreiben Sie um.
Klasse fu {// public void show () Wenn die übergeordnete Klasse Show () ist, ist es genau die gleiche wie die Subklassenfunktion. Die Show der übergeordneten Klasse der übergeordneten Klasse wird die öffentliche void Show (String -Name) // Die Show der übergeordneten Klasse von der Unterklasse unterscheidet (die Parameterliste ist unterschiedlich), sodass die Show der übergeordneten Klasse nicht umgeschrieben wird. }} class zi erweitert Fu {public void show () {System.out.println ("zi"); }} Klasse jicheng {public static void main (String [] args) {zi z1 = neu zi (); z1.show ("nihao"); // Die Show der übergeordneten Klasse wird}} genannt3) Konstruktor
1. Bei der Initialisierung des Subklassenobjekts wird auch der Konstruktor der übergeordneten Klasse ausgeführt, da die erste Zeile des Konstruktors der Unterklasse standardmäßig eine implizite Anweisung Super () hat.
2. Super () greift auf den Konstruktor der hohlen Parameter in der übergeordneten Klasse zu, und die erste Zeile aller Konstruktoren in der Unterklasse ist standardmäßig super ()
3. Der Grund, warum Unterklassen auf den Konstruktor der Elternklasse zugreifen müssen
<1> Da die Datenunterklasse in der übergeordneten Klasse direkt erhalten werden kann, soll die Unterklasse zuerst sehen, wie die übergeordnete Klasse die Daten initialisiert. Wenn die Unterklasse initialisiert wird, greift sie daher zunächst standardmäßig auf den Konstruktor der übergeordneten Klasse zu.
<2> Wenn Sie auf den von der Elternklasse formulierten Konstruktor oder auf den Konstruktor zugreifen möchten, dessen übergeordnete Klasse keine leeren Parameter hat, können Sie sie formulieren, indem Sie die Super -Anweisung manuell definieren.
<3> Natürlich kann die erste Zeile des Konstruktors der Unterklasse auch manuell angegeben werden, um auf den Konstruktor dieser Klasse zuzugreifen, aber mindestens einer der Konstruktoren in der Unterklasse zugreift auf den Konstruktor der übergeordneten Klasse.
Klasse fu {String Name; int Alter; Fu () {System.out.println ("Hallo Fu");} fu (String -Name) {System.out.println (Name); } Fu (String -Name, int Alter) {this.name = name; this.age = Alter; System.out.println ("Name:"+Name+", Alter:"+Alter); }} class zi erweitert Fu {//zi() {System.out.println("hello zi ");} standardmäßig wird der parameterlose Konstruktor Zi () der übergeordneten Klasse zuerst aufgerufen. Super ("Zhangsan", 20); // Verwenden Sie die Super-Anweisung manuell, um den Konstruktor der übergeordneten Klasse anzugeben, um nicht private Informationen des übergeordneten Klassensystems zu erhalten. }} Klasse test {public static void main (String [] args) {zi z1 = neu zi (); }}Beispiel für die Konstruktorausnahme:
Schreiben Sie die Programmergebnisse auf
Klasse Super {int i = 0; public Super (String s) {i = 1; }} class Demo erweitert Super {public Demo (String s) {i = 2; } public static void main (String [] args) {Demo d = new Demo ("yes"); System.out.println (di); }} // Compilation fehlgeschlagen, da der Konstruktor mit leeren Parametern in der übergeordneten Klasse fehlte. // oder die Unterklasse sollte den Konstruktor in der übergeordneten Klasse angeben, die über die Super -Anweisung aufgerufen werden soll.Beispiele neu schreiben und überlasteten:
Klasse Demo {int show (int a, int b) {return 0;}}Die folgenden Funktionen können in einer Unterklasse der Demo existieren.
A.public int show (int a, int b) {return 0;} // Ja, überschreibt.
B.PRivate Int Show (int a, int b) {return 0;} // nein, die Berechtigungen reichen nicht aus.
C. private int show (int a, long b) {return 0;} // Ja, es ist nicht die gleiche Funktion wie die übergeordnete Klasse. Keine Abdeckung entspricht der Überlastung.
D.Public Short Show (int a, int b) {return 0;} // nein, da diese Funktion nicht in derselben Klasse wie die angegebene Funktion oder in der untergeordneten übergeordneten Klasse angezeigt wird.
E.Static Int Show (int a, int b) {return 0;} // nein, static kann nur statisch überschreiben. <br> <br> Die Unterklasse ermöglicht also das Umschreiben und Überladen.
For more Java-related content, readers who are interested in this site can view the topics: "Introduction and Advanced Tutorial on Java Object-Oriented Programming", "Tutorial on Java Data Structure and Algorithm", "Summary of Java Operation DOM Node Skills", "Summary of Java File and Directory Operation Skills" and "Summary of Java Cache Operation Skills"
Ich hoffe, dieser Artikel wird für Java -Programme aller hilfreich sein.