Heim > Java > javaLernprogramm > Hauptteil

Java-objektorientierte Vererbung, Polymorphismus, Komposition

高洛峰
Freigeben: 2016-11-17 14:17:08
Original
1131 Leute haben es durchsucht

Merkmale der Vererbung

Einzelne Vererbung: Jede Unterklasse hat höchstens eine direkte übergeordnete Klasse. Die Anzahl der indirekten übergeordneten Klassen ist nicht begrenzt.

Achten Sie auf das Konzept der übergeordneten Klasse: A-->B-->C-->D, hier ist ABC die übergeordnete Klasse von D, C ist die direkte übergeordnete Klasse von D und AB ist die indirekte übergeordnete Klasse von D

übergeordnete Klassen und Unterklassen haben eine allgemeine und spezielle Beziehung; Unterklassen erweitern übergeordnete Klassen und Unterklassen sind spezielle übergeordnete Klassen

Objekt ist die direkte oder indirekte übergeordnete Klasse aller Klassen ; Wenn beim Definieren einer Klasse die übergeordnete Klasse nicht direkt angegeben wird, wird die Objektklasse standardmäßig geerbt.

Welche Elemente erbt die Unterklasse von der übergeordneten Klasse? erbt nicht die Konstruktionsmethode der übergeordneten Klasse, aber die Konstruktionsmethode der übergeordneten Klasse muss immer aufgerufen werden. Methode

Die Unterklasse erbt die Instanzvariablen und Instanzmethoden, Klassenvariablen und Klassenmethoden der übergeordneten Klasse. Voraussetzung ist natürlich, dass es nicht durch privat geändert wird

Die Mitglieder der übergeordneten Klasse, die privat geändert werden, werden dies nicht tun Methoden, die von Unterklassen geerbt werden

und mit final in geändert werden Die übergeordnete Klasse kann nicht von der Unterklasse überschrieben werden

überschreibt Methoden

Unterklassen und übergeordnete Klassen haben dieselbe Methodensignatur. Dies wird als Unterklasse bezeichnet, die die Methode der übergeordneten Klasse überschreibt

Zwei das Gleiche, zwei kleine, ein großes Prinzip:

Zwei gleiche: Der Methodenname ist derselbe, die formale Parameterliste ist derselbe

Zwei kleine: Der Rückgabewert der Unterklassenmethode ist gleich oder kleiner als die der übergeordneten Klasse; die von der Unterklassenmethode ausgelöste Ausnahme muss gleich oder kleiner als die von der übergeordneten Klasse ausgelöste sein.

Ein wichtiger Punkt: Die Zugriffsrechte der Unterklassenmethode müssen sein Gleich oder größer als die übergeordnete Klasse

statisch: Die Unterklassenmethode muss mit der übergeordneten Klassenmethode konsistent sein, entweder einer Klassenmethode oder einer Instanzmethode, und die beiden dürfen nicht inkonsistent sein

Nach der Methode Beim Umschreiben können Unterklassenobjekte nicht auf die Methoden der übergeordneten Klasse zugreifen, sie können jedoch die Methoden der übergeordneten Klasse in der Unterklassenmethode aufrufen: Super-Instanzmethode, Name der übergeordneten Klasse

Wenn Die Methode der übergeordneten Klasse ist privat. Dann kann die Unterklasse diese Methode nicht überschreiben. Wenn die Unterklasse eine Methode mit derselben Signatur wie die private Methode der übergeordneten Klasse hat, handelt es sich nicht um eine neu hinzugefügte Methode der Unterklasse hat nichts mit der übergeordneten Klasse zu tun

Unterklassenmethoden können mit übergeordneten Klassenmethoden überladen sein

Bei Methoden, die in der übergeordneten Klasse mit „final“ geändert wurden, können Unterklassen das

Super-Schlüsselwort

in der untergeordneten Klasse verwenden Sie das Schlüsselwort super, um Instanzvariablen oder Instanzmethoden der übergeordneten Klasse aufzurufen.

super und static können nicht gleichzeitig zum Ändern von Methoden verwendet werden und static können nicht gleichzeitig zum Ändern von Methoden verwendet werden

sub Die Klasse erbt eine Variable von der übergeordneten Klasse und definiert eine andere Variable mit demselben Namen. Zu diesem Zeitpunkt können Sie den Variablennamen super verwenden Klassenname. Variablenname für den Zugriff auf die Variable der übergeordneten Klasse

Variablensuchsequenz

Die Unterklassenmethode greift im Folgenden auf eine Variable zu Reihenfolge:

Ob es in der aktuellen Methode eine lokale Variable mit demselben Namen gibt

Gibt es in der aktuellen Klasse eine Mitgliedsvariable mit demselben Namen? >Super ruft die übergeordnete Klasse auf Konstruktor

Obwohl die Unterklasse den Konstruktor der übergeordneten Klasse nicht erbt, ruft sie immer den Konstruktor der übergeordneten Klasse auf. Verwenden Sie dies, um den Konstruktor derselben Klasse aufzurufen, und verwenden Sie super

, um die übergeordnete Klasse aufzurufen: Die Super-Call-Anweisung wird in die erste Zeile der Konstruktormethode geschrieben, da diese auch geschrieben werden muss in der ersten Zeile, also super und dies wird nicht gleichzeitig angezeigt

Indirekter Aufruf: Die erste Zeile der Unterklassenmethode ist dies, und der aufgerufene Konstruktor muss auch den Konstruktor der übergeordneten Klasse aufrufen

Impliziter Aufruf: Ohne super oder this ruft das System standardmäßig den parameterlosen Konstruktor der übergeordneten Klasse auf

Die Unterklasse erbt die übergeordnete Klasse und ruft den Konstruktor der übergeordneten Klasse immer Ebene für Ebene auf, bis Object wird aufgerufen und die oberste Ebene gefunden. Beginnen Sie nacheinander mit der Ausführung der nächsten Ebene.

Beispielsweise der folgende Code, Vererbungsbeziehung: A-->B-->C- ->D

Ausgabe:

Klasse-A-Konstruktor

B-Klasse-Konstruktor

C-Klasse-Konstruktor

D-Klasse-Konstruktor

Wenn die Die übergeordnete Klasse verfügt nicht über einen Konstruktor ohne Argumente. Die Unterklasse muss den parameterlosen Konstruktor der übergeordneten Klasse aufrufen, sodass sie nicht durch
public class Test{  
    public static void main(String[] args) {  
        D d=new D();
    }
} 
class D extends C{    D(){
        System.out.println("D类构造器");
    }
}class C extends B{    C(){
        System.out.println("C类构造器");
    }
}class B extends A{    B(){
        System.out.println("B类构造器");
    }
}class A{    A(){
        System.out.println("A类构造器");
    }
}
Nach dem Login kopieren

Polymorphismus

Kompiliert werden kann. Vereinfacht gesagt handelt es sich dabei um Polymorphismus : Erstellen Sie in einem Pyramiden-ähnlichen Vererbungssystem die untere Klasse. Verwenden Sie beim Unterklassifizieren von Objekten den Typ der oberen übergeordneten Klasse, um auf diese unteren Unterklassenobjekte zu verweisen. Wenn dieselbe Methode über denselben Referenzvariablentyp aufgerufen wird, werden unterschiedliche Ergebnisse angezeigt >
Polymorphismus kommt von: Erben des übergeordneten Typs Der Verweis verweist auf das Überschreiben der Objektmethode des Untertyps

Die Referenzvariable hat zwei Typen, einer ist der Kompilierzeittyp und der andere ist die Laufzeit Typ

Upcast: Der übergeordnete Typ verweist auf den Subtyp Object, die Aufwärtstransformation wird vom System automatisch abgeschlossen

Im Fall einer Aufwärtstransformation: Die überschriebene Methode der Unterklasse kann aufgerufen werden Die Referenz des übergeordneten Typs, aber auf Instanzvariablen in der übergeordneten Klasse, die in der Unterklasse nicht verfügbar sind, kann nicht zugegriffen werden. Das heißt, Instanzvariablen weisen keinen Polymorphismus auf

instanceof und erzwungene Typkonvertierung

Basistypen haben eine erzwungene Typkonvertierung, wie zum Beispiel (double)16; Referenztypen haben auch eine erzwungene Typkonvertierung

Zum Beispiel gibt es die folgende Vererbungskette: A-->B-- >C-->D-->E-->F, B b=new D(), in diesem Fall B-Typ verwenden. Zeigt auf das D-Objekt. Zu diesem Zeitpunkt kann die b-Variable konvertiert werden Der ACD-Typ kann jedoch nicht in den EF-Typ konvertiert werden. Es wird eine Ausnahme ClassCastException

ausgelöst.

Vor der erzwungenen Typkonvertierung sollte „instanceof“ verwendet werden, um zu bestimmen, ob die Konvertierung durchgeführt werden kann, um das Auslösen von Ausnahmen zu vermeiden

X-Variableninstanz vom Y-Typ: Um zu bestimmen, ob die X-Variable in den Y-Typ konvertiert werden kann, Drei Situationen können auftreten:

true bedeutet, dass es konvertiert werden kann, was bedeutet, dass der Typ des Objekts, auf das die X-Variable zeigt, vom Typ Y oder einem Subtyp von Y ist;

false bedeutet, dass es konvertiert werden kann kann nicht konvertiert werden, was bedeutet, dass der Typ der X-Variablen derselbe ist wie der Y-Typ Eltern-Kind- oder Kind-Eltern-Beziehung vom Typ Y. Beide sind Untertypen des Passes, was darauf hinweist, dass X und Y keine Eltern-Kind- oder Kind-Vater-Vererbungsbeziehung haben

Vererbung und Kombination

Vererbung kann die Wiederverwendung von Code realisieren, zerstört jedoch die Kapselung; Kombination kann auch die Wiederverwendung von Code realisieren

Grundsätze, die beim Entwerfen von übergeordneten Klassen befolgt werden müssen:

Versuchen Sie, private zu verwenden, um die internen Daten der übergeordneten Klassen zu verbergen Klasse und erlauben Sie Unterklassen nicht, direkt auf die Mitgliedsvariablen der übergeordneten Klasse zuzugreifen

Lassen Sie Unterklassen nicht tun, was sie wollen. Auf Methoden der übergeordneten Klasse zugreifen und diese ändern. Die Hilfstool-Methoden der übergeordneten Klasse werden mit „privat“ dekoriert; die Methoden, die nicht von Unterklassen aufgerufen werden sollen, werden mit „final“ dekoriert Umgeschrieben durch Unterklassen werden mit protected geändert

Rufen Sie keine Methoden auf, die von Unterklassen im Konstruktor der übergeordneten Klasse überschrieben werden können, die Folgen sind schwerwiegend

Prinzipien der Designvererbung:

Unterklassen müssen zusätzliche Attribute hinzufügen, keine Eigenschaftenänderungen

Unterklassen müssen ihre eigenen einzigartigen Funktionen oder Verhaltensweisen hinzufügen, Sie können neue Methoden hinzufügen oder übergeordnete Klassenmethoden neu schreiben

Entwerfen Sie keine Vererbung Nur zum Zweck der Wiederverwendung von Code, aber es hängt von der tatsächlichen Situation ab, ob die übergeordnete Klasse und die Unterklasse eine „Hat-eine“-Beziehung haben

Ich möchte nicht, dass eine Klasse vererbt wird:

final: Verwenden Sie final, um die Klasse als letzte Klasse zu ändern, sie kann nicht geerbt werden

private: Ändern Sie alle Konstruktionsmethoden der Klasse mit privat, sodass Unterklassen den Konstruktor der Klasse nicht aufrufen und nicht erben können Darüber hinaus sollte eine statische Methode bereitgestellt werden, um den Konstruktor der Klasse

zurückzugeben. Die Kombination kann auch eine Code-Wiederverwendung erreichen

Klasse A verwendet die Methode von Klasse B

Erstellen Sie ein Objekt der Klasse B in Klasse A und ändern Sie es mit privatem

Rufen Sie die Methode des Objekts der Klasse B in der Methode der Klasse A auf

Kombination oder Vererbung:

Vererbung : Die Unterklasse und die übergeordnete Klasse haben eine „ist-ein“-Beziehung, konkret und abstrakt, speziell Kombination mit der allgemeinen Beziehung

: Die neue Klasse und die alte Klasse haben eine „hat-ein“-Beziehung, die Beziehung zwischen dem Ganzen und dem Teil

Sonstiges:

Für Unterklassen aus der übergeordneten Klasse Beim Erben einer Variablen und Definieren einer Variablen mit demselben Namen wird beim Erstellen eines Unterklassenobjekts Speicher zugewiesen beide Variablen, aber die übergeordnete Klassenvariable ist ausgeblendet

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!