Artikelinhalt
Rückruf an Java -Erbschaft
Betrachten Sie die folgende Klasse:
Klasse CPARENTDiese Klasse hat zwei Eigenschaften: A und B. In Java werden Immobilien Felder genannt. Diese Klasse hat eine Methode, die zwei Zahlen hinzufügt, nämlich die Feldwerte. Der Name der Klasse ist CPARENT mit dem vorhergehenden C für den Taschenrechner. Das folgende Codesegment in der Main () -Methode gibt Ausgabe 5 aus:
CPARENT Parent = new cParent ();Betrachten Sie die folgende Klasse, die die Unterklasse der obigen Klasse (CPARENT) ist:
Klasse CCHILD erweitert CPARENTBeachten Sie die Verwendung des Schlüsselworts erstreckt sich. Diese Klasse hat das Feld C und die Methode multiplizieren (). Die Klasse erbt die Felder 'A' und B und die Methode add (). Wenn der Feldwert für 'a' oder b für dieses aktuelle instanziierte Objekt (untergeordnetes Objekt) verwendet werden soll, muss er weiterhin zu einem Wert zugewiesen werden. Für diese Klasse wird der Wert von 'a' erbelt, der mit dem Feldwert der Klasse von C multipliziert wird. Der Name dieser Klasse ist CCHILD mit dem vorhergehenden C für den Taschenrechner. Das folgende Codesegment in der Main () -Methode passt zu dieser Klasse:
CCHILD CILD = NEU CCHILD ();Die Ausgabe ist 8. Beachten Sie, dass das Feld 'a', obwohl er vererbt wurde, immer noch ein Wert zugewiesen werden musste; In diesem Fall der gleiche Wert.
Betrachten Sie die folgende Klasse, die die Unterklasse der obigen Klasse, CCHILD:
Klasse cgrandchild erweitert CCHILDBeachten Sie die Verwendung des Schlüsselworts erstreckt sich. Diese Klasse hat das Feld D und die Methode, divide (). Die Klasse erbt die Mitglieder 'A', B und add () aus der CCHILD -Klasse, die sie von der CPARENT -Klasse erbte. Es erbt auch die Mitglieder C und Multiplizieren () von der CCHILD -Klasse. Wenn der Feldwert für 'A' oder B oder C aus den übergeordneten oder Großelternklassen für dieses aktuelle sofortige Objekt (Enkelkind -Objekt) verwendet werden soll, muss er noch zu einem Wert zugewiesen werden. Für diese Klasse wird der Wert von 'a' erbelt, der durch den Feldwert der Klasse von D geteilt wird. Der Name dieser Klasse ist cGrandchild mit dem vorhergehenden C für den Taschenrechner. Das folgende Codesegment in der Main () -Methode passt zu dieser Klasse:
CGRANDCHILD GCHILD = New CGrandChild ();Der Ausgang ist 1. Beachten Sie, dass das Feld 'a', obwohl er vererbt wurde, immer noch ein Wert zugewiesen werden musste; In diesem Fall der gleiche Wert 2.
Verwendung des Super -Keywords
Feld und super
Im obigen Programm wurde der Wert für das Feld 'a' dreimal eingestellt, einmal für das übergeordnete Objekt, einmal für das Kinderobjekt und einmal für das Enkelkind -Objekt. Um dies jedes Mal zurückzusetzen, kann der Wert von 2 einmal in der Implementierung der Elternklassen (Definition) wie folgt zugewiesen werden:
Dies löst das Problem des Zurücksetzens für jedes Nachkommensobjekt. In den Nachkommenklassen wird das Feld 'a' einfach (normalerweise) genannt (normalerweise).
Um auf den Wert eines erblichen Feldes zuzugreifen, muss das Super -Keyword in der Implementierung von Interessensklassen wie folgt verwendet werden:
super.FeldnameDas folgende Codesegment zeigt, wie auf den Namen 'A' in einer neuen CCHILD -Implementierung zugegriffen wurde:
Klasse CCHILD erweitert CPARENTDie Klasse CCHILD hat jetzt ihren eigenen Namen P anstelle von 'a'. Und so die Anweisung in der Methode add (),
Rückgabe a * c;ist jetzt,
return p * c;In ähnlicher Weise kann die Klassenimplementierung CGRandchild wie folgt durch Q ersetzt werden:
Klasse cgrandchild erweitert CCHILDHinweis: Die Vererbung findet in allen Nachkommenklassen statt. Die Methode 'a' und die add () werden in die CCHILD -Klasse und in die CGRandchild -Klasse vererbt.
Methode und super
In ähnlicher Weise kann bei der Implementierung einer Nachkommenklasse auf ein ererbter Feld zugegriffen werden. Auf eine ererbte Methode kann auch in einer Nachkommensklasse unter Verwendung des Super -Keywords zugegriffen werden. Die Syntax ist:
Die Implementierung der ursprünglichen CCHILD -Klasse kann wie folgt geändert werden:
Klasse CCHILD erweitert CPARENTBeachten Sie, dass die Verwendung von Super. Die ererbte add () -Methode wird jetzt als „Summe“ bei der Implementierung von CCHILD angesehen. Das Feld C und die Methode multiplizieren () sind noch da. Ein Codesegment zur Addition in der main () -Methode, die zu dieser geänderten CCHILD -Klasse passt, lautet:
CCHILD CILD = NEU CCHILD ();Die Ausgabe beträgt 5, vorausgesetzt, die übergeordnete Klasse wurde geändert mit:
int a = 2;Konstruktor und super
Der Standardkonstruktor, der nicht implementiert wird, wird in jede Nachkommenklasse vererbt und muss bei der Implementierung der Nachkommen und in der Main () -Methode nicht berücksichtigt werden. Sobald eine übergeordnete Klasse einen benutzerdefinierten Konstruktor hat, muss der Rest ihrer Nachkommen einen ähnlichen Konstruktor haben. Betrachten Sie die übergeordnete Klasse mit einem benutzerdefinierten Konstruktor wie folgt:
Die Felder von 'a' und B werden ohne Zuweisung deklariert. Der Konstruktor führt die Zuordnung durch. Die Kinderklasse muss denselben oder einen ähnlichen Konstruktor haben. Die entsprechende untergeordnete Klasse für die ursprüngliche Taschenrechnerhierarchie kann sein:
Klasse CCHILD erweitert CPARENTDer Konstruktor hier ist der gleiche wie der des Elternteils. Der Körper des Konstruktors hier hat nur:
Super (x, y);was nur den Konstruktor des Elternteils mit den erhaltenen Argumenten nennt. "Super" hier repräsentiert den Konstruktor der Elternklassen. Dies ist eine weitere Verwendung von Super. In diesem Kinderkonstruktor gibt es keine Änderung. Die entsprechende Enkelkindklasse für die ursprüngliche Taschenrechnerhierarchie kann sein:
Klasse cgrandchild erweitert CCHILDDer Konstruktor hier wird geändert. Es hat die gleichen X- und Y -Parameter und einen zusätzlichen Parameter, z. Z soll den Wert für D, den Divisor, zuweisen. Der Körper für den Konstruktor beginnt mit dem Aufruf des Konstruktors der übergeordneten Klasse. Dann wird das Feld für den Teiler zugewiesen. Das folgende Codesegment in der Main () -Methode passt zu dieser Klasse:
CGRANDCHILD GCHILD = NEU CGRANDCHILD (2, 3, 2);Die Ausgabe dafür ist 1.
Abschluss
Super wird nach etwas in der unmittelbaren Elternklasse suchen. Wenn es dort nicht sieht, wird es in der Großelternklasse danach suchen. Wenn es dort nicht sieht, wird es in der Urgroßelternklasse danach suchen. und so weiter, bis es entweder sieht oder es nicht sieht. "Super" wird normalerweise in der Implementierung einer Unterklasse verwendet. Es wird für Feld, Methode und Konstruktor verwendet. Die direkte Superklasse ist die Elternklasse. Die Großelternklasse ist eine Superklasse, aber nicht die direkte Superklasse. Als nächstes sollte der Leser die Verwendung von „Super“ mit verschachtelten Klassen verstehen - siehe später.