Heim  >  Artikel  >  Java  >  Einführungsaufsatz zu Java-Grundlagen (11) JavaSE Edition – Vererbung, Überschreibung, abstrakte Klassen

Einführungsaufsatz zu Java-Grundlagen (11) JavaSE Edition – Vererbung, Überschreibung, abstrakte Klassen

黄舟
黄舟Original
2016-12-22 13:21:071301Durchsuche

1. Objektorientierte Funktion zwei: Vererbung

Definition:

bedeutet, dass ein Objekt die Eigenschaften und Methoden eines anderen Objekts direkt verwendet.

Vorteile der Vererbung:

1. Stellen Sie die Wiederverwendbarkeit des Codes sicher.

2. Lassen Sie Klassen eine direkte Beziehung zueinander haben, was eine Voraussetzung für den dritten charakteristischen Polymorphismus darstellt.

Einzelne Vererbung wird in Java unterstützt. Es unterstützt die Mehrfachvererbung nicht direkt, verbessert jedoch den Mehrfachvererbungsmechanismus in C++.

Einzelne Vererbung: Eine Unterklasse kann nur eine übergeordnete Klasse haben.

Mehrfachvererbung: Eine Unterklasse kann mehrere direkte übergeordnete Klassen haben (in Java nicht zulässig, Verbesserungen vorgenommen und nicht direkt unterstützt, da mehrere übergeordnete Klassen dieselben Mitglieder haben, was zu Aufrufunsicherheit führt. In Java, dies wird durch die Methode „Mehrfachimplementierung“ widergespiegelt

Java unterstützt mehrschichtige (mehrfache) Vererbung (wenn beispielsweise C B erbt und B A erbt, wird ein Vererbungssystem angezeigt.)

(Ein kleiner Unsinn: Wenn Sie ein Vererbungssystem verwenden möchten, schauen Sie sich 1 die oberste Klasse in der Klasse an, um die Grundfunktionen des Systems zu verstehen. 2 Erstellen Sie das am weitesten untergeordnete Objekt im System, um die Funktionsverwendung abzuschließen .)

Wann wird Vererbung definiert?

Wenn eine Eigentumsbeziehung zwischen Klassen besteht, wird diese als Vererbung definiert (xxx ist ein Typ von yyy; xxx erweitert yyy )

Wenn Mitglieder dieser Klasse denselben Namen wie lokale Variablen haben, verwenden Sie dies, um sie zu unterscheiden.
Wenn Mitgliedsvariablen in der untergeordneten Elternklasse denselben Namen haben, verwenden Sie super zur Unterscheidung der übergeordneten Klasse.

diese: stellt einen Verweis auf ein Objekt dieser Klasse dar

2 override (override)

Konzept: Wenn die Elementfunktionen in der untergeordneten Klasse und der übergeordneten Klasse identisch sind, wird dieses Phänomen als Override-Operation bezeichnet Funktion in der Unterklasse.

1. Überladung
2. Überschreibung wird auch Überschreibung genannt:

1. Die Berechtigungen der Unterklasse müssen größer oder gleich den Berechtigungen der übergeordneten Klasse sein. Wenn eine Methode privat ist, wird sie nicht als Override bezeichnet.

2. Statisch kann nur statisch überschrieben werden >Wann soll die Überschreibungsoperation verwendet werden? Einführungsaufsatz zu Java-Grundlagen (11) JavaSE Edition – Vererbung, Überschreibung, abstrakte Klassen

Beim Erweitern einer Klasse muss die Unterklasse die Funktionsdeklaration der übergeordneten Klasse beibehalten, aber wenn Sie den eindeutigen Inhalt der Funktion in der Unterklasse definieren möchten , verwenden Sie zum Abschließen die Überschreibungsoperation Die übergeordnete Klasse wird auch ausgeführt, wenn auf den Konstruktor der Unterklasse zugegriffen wird. In der ersten Zeile des Konstruktors gibt es eine standardmäßige implizite Anweisung: super();

Der Instanziierungsprozess Unterklasse: Alle Konstruktoren in der Unterklasse greifen standardmäßig auf den leeren Parameterkonstruktor in der übergeordneten Klasse zu.


Warum muss die Unterklasse auf den Konstruktor in der übergeordneten Klasse zugreifen? Da die Unterklasse die übergeordnete Klasse erbt und den Inhalt (die Eigenschaften) der übergeordneten Klasse erhält, müssen Sie beim Erstellen eines Objekts zunächst sehen, wie die übergeordnete Klasse ihren eigenen Inhalt initialisiert, bevor Sie auf den Inhalt der übergeordneten Klasse zugreifen , muss die Unterklasse auf den Konstruktor in der übergeordneten Klasse zugreifen. Um diese notwendige Aktion abzuschließen, wird die super()-Anweisung zum Konstruktor der Unterklasse hinzugefügt.

Wenn in der übergeordneten Klasse kein leerer Parameterkonstruktor definiert ist, muss der Konstruktor der Unterklasse mit super angeben, welcher Konstruktor in der übergeordneten Klasse aufgerufen werden soll. Wenn gleichzeitig der Konstruktor dieser Klasse im Unterklassenkonstruktor aufgerufen wird, ist super nicht mehr vorhanden, da sowohl super als auch this nur die erste Zeile definieren können. Es kann also nur einen geben. Aber garantiert ist, dass es definitiv andere Konstruktoren in der Unterklasse gibt, die auf den Konstruktor der Elternklasse zugreifen.

Hinweis: Die Super-Anweisung muss in der ersten Zeile des Unterklassenkonstruktors definiert werden. Denn zuerst muss die Initialisierungsaktion der übergeordneten Klasse abgeschlossen werden.

Ein Objektinstanziierungsprozess:


Beispiel: Person p = new Person();
1, die JVM liest die Datei Person.class im angegebenen Pfad und In den Speicher laden, und die übergeordnete Klasse von Person wird zuerst geladen (sofern eine direkte übergeordnete Klasse vorhanden ist).
2. Erstellen Sie Platz im Heap-Speicher und weisen Sie eine Adresse zu.
3 und initialisieren Sie im Objektbereich standardmäßig die Eigenschaften im Objekt.
4. Rufen Sie den entsprechenden Konstruktor zur Initialisierung auf.
5. Im Konstruktor ruft die erste Zeile zunächst den Konstruktor in der übergeordneten Klasse zur Initialisierung auf.
6. Nachdem die übergeordnete Klasse initialisiert wurde, werden die Eigenschaften der Unterklasse angezeigt und initialisiert.
7 und führen Sie dann eine spezifische Initialisierung des Unterklassenkonstruktors durch.
8. Weisen Sie nach der Initialisierung den Adresswert der Referenzvariablen zu

Bildaufteilung (die Schritte sind wie folgt):

Einführungsaufsatz zu Java-Grundlagen (11) JavaSE Edition – Vererbung, Überschreibung, abstrakte Klassen

3. final-Schlüsselwörter

1.final ist ein Modifikator, der Klassen, Methoden und Variablen ändern kann.

2. Endgültig geänderte Klassen können nicht vererbt werden.

3.Endgültig geänderte Methoden können nicht überschrieben werden. (Beachten Sie hier den Unterschied zu static. Wenn die Unterklasse statisch ist, kann sie trotzdem überschrieben werden)

4. Die von final geänderte Variable ist eine Konstante und kann nur einmal zugewiesen werden.

Warum sollten wir final verwenden, um Variablen zu ändern? Wenn tatsächlich ein Datenelement im Programm festgelegt ist, reicht es aus, die Daten direkt zu verwenden. Diese sind jedoch nicht lesbar, sodass den Daten ein Name zugewiesen wird. Darüber hinaus kann sich der Wert dieses Variablennamens nicht ändern und wird daher durch Hinzufügen von final festgelegt.

Standardschrift: Alle Buchstaben von Konstanten sollten in Großbuchstaben geschrieben sein, aus mehreren Wörtern bestehen und mit _ in der Mitte verknüpft sein.

Nachteile der Vererbung:

Die Nachteile der Vererbungsunterbrechungskapselung (die Lösung kann darin bestehen, den Modifikator final für die endgültige Deklaration zu verwenden)

4. Abstraktionsklasse

Zusammenfassung: vage, allgemein, unverständlich, nicht spezifisch.

Funktionen:

1. Wenn eine Methode nur deklariert, aber nicht implementiert ist, ist die Methode eine abstrakte Methode und muss durch eine Zusammenfassung geändert werden. Abstrakte Methoden müssen in einer abstrakten Klasse definiert werden und die Klasse muss auch durch die Zusammenfassung geändert werden.

2. Abstrakte Klassen können nicht instanziiert werden. (Grund: Weil es sinnlos ist, abstrakte Methoden aufzurufen)

3. Eine abstrakte Klasse muss über alle abstrakten Methoden verfügen, die von ihren Unterklassen abgedeckt werden, bevor die Unterklasse instanziiert werden kann. Ansonsten ist diese Unterklasse immer noch eine abstrakte Klasse.

Fragenverständnis:

1. Gibt es einen Konstruktor in einer abstrakten Klasse? Einige werden zum Initialisieren von Unterklassenobjekten verwendet.

2. Kann eine abstrakte Klasse keine abstrakten Methoden definieren? Es ist möglich, aber selten. Der Zweck besteht darin, zu verhindern, dass diese Klasse Objekte erstellt. Das Adapterobjekt von AWT ist diese Klasse. Normalerweise haben die Methoden dieser Klasse einen Methodenkörper, aber keinen Inhalt. eq: void show(){}Dieser Typ hat keinen Methodenkörper

3 Mit welchen Schlüsselwörtern können abstrakte Schlüsselwörter nicht koexistieren?

Private funktioniert nicht, da Private nur der übergeordneten Klasse bekannt ist und die Abstraktion überschrieben werden muss, Unterklassen sie jedoch nicht überschreiben können, sodass sie nicht mit Private koexistieren kann.

statisch Nein, denn wenn das Mitglied statisch ist, kann es direkt mit dem Klassennamen aufgerufen werden, aber die Methode ist in der Zusammenfassung kein spezifischer Methodenkörper und kann daher nicht koexistieren.

endgültige Nr. Da endgültige Mengenmitglieder und Klassen nicht überschrieben oder vererbt werden können, können sie nicht nebeneinander existieren.

4. Was sind die Gemeinsamkeiten und Unterschiede zwischen abstrakten Klassen und allgemeinen Klassen?

Ähnliche Punkte: Sowohl abstrakte Klassen als auch allgemeine Klassen werden zur Beschreibung von Dingen verwendet und beide haben interne Mitglieder.

Unterschiede: 1. Allgemeine Klassen verfügen über genügend Informationen, um Dinge zu beschreiben, während abstrakte Klassen möglicherweise nicht über genügend Informationen verfügen, um Dinge zu beschreiben.

2. Abstrakte Methoden können nicht in allgemeinen Klassen definiert werden, nur nicht abstrakte Methoden können in abstrakten Klassen definiert werden, und nicht abstrakte Methoden können ebenfalls definiert werden.

3. Allgemeine Klassen können instanziiert werden, abstrakte Klassen können jedoch nicht instanziiert werden.

5. Muss eine abstrakte Klasse eine übergeordnete Klasse sein? Ja, da die Unterklasse ihre Methode überschreiben muss, bevor die Unterklasse instanziiert werden kann.

Das Obige ist der grundlegende Einführungsaufsatz zur Java (11) JavaSE-Version – Vererbung, Überschreibung, abstrakter Klasseninhalt. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn