Super Keyword in Java

Super Keyword in Java
Das Schlüsselwort Super wird in der Vererbung von Java -Klassen verwendet. In Java ist die Superklasse die übergeordnete Klasse einer aktuellen Klasse. Die aktuelle Klasse ist die Kinderklasse (Unterklasse) der Superklasse. Es besteht die Möglichkeit, dass das Enkelkind- und Urenkelunterricht nach unten geht. Die übergeordnete Klasse ist die direkte Superklasse der aktuellen Klasse. Die Großelternklasse ist nicht die direkte Superklasse der aktuellen Klasse. Dieser Artikel erläutert die Verwendung des Schlüsselworts Super in Java. Es beginnt mit der Präsentation einer Elternklasse, einem Kind der Elternklasse und einem Enkel der Elternklasse. Dann zeigt es, wie das Wort, Super, in die Hierarchie passt. Die Hierarchie unten bildet eine Form des Taschenrechners.

Artikelinhalt

  • Rückruf an Java -Erbschaft
  • Verwendung des Super -Keywords
  • Abschluss

Rückruf an Java -Erbschaft

Betrachten Sie die folgende Klasse:

Klasse CPARENT
int a;
int b;
int add ()
Return a + b;

Diese 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 ();
Elternteil.a = 2;
Elternteil.B = 3;
int radd = Elternteil.hinzufügen();
System.aus.println (radd);

Betrachten Sie die folgende Klasse, die die Unterklasse der obigen Klasse (CPARENT) ist:

Klasse CCHILD erweitert CPARENT
int c;
int multiply ()
Rückgabe a * c;

Beachten 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 ();
Kind.a = 2;
Kind.C = 4;
int rmult = Kind.multiplizieren();
System.aus.println (rmult);

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 CCHILD
int d;
int divide ()
A / d zurückgeben;

Beachten 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 ();
gchild.a = 2;
gchild.d = 2;
int rdiv = gChild.teilen();
System.aus.println (rdiv);

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:

Klasse CPARENT
int a = 2;
int b;
int add ()
Return a + b;

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.Feldname

Das folgende Codesegment zeigt, wie auf den Namen 'A' in einer neuen CCHILD -Implementierung zugegriffen wurde:

Klasse CCHILD erweitert CPARENT
int p = super.A;
int c;
int multiply ()
return p * c;

Die 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 CCHILD
int q = super.A;
int d;
int divide ()
return q / d;

Hinweis: 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:

super.methodname ()

Die Implementierung der ursprünglichen CCHILD -Klasse kann wie folgt geändert werden:

Klasse CCHILD erweitert CPARENT
int c;
int sum = super.hinzufügen();
int multiply ()
Rückgabe a * c;

Beachten 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 ();
int rsum = Kind.Summe;
System.aus.println (rsum);

Die Ausgabe beträgt 5, vorausgesetzt, die übergeordnete Klasse wurde geändert mit:

int a = 2;
int b = 3;

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:

Klasse CPARENT
int a, b;
public cparent (int x, int y)
a = x; B = y;

int add ()
Return a + b;

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 CPARENT
Cchild (int x, int y)
Super (x, y);

int c;
int multiply ()
Rückgabe a * c;

Der 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 CCHILD
int d;
Cgrandchild (int x, int y, int z)
Super (x, y);
d = z;

int divide ()
A / d zurückgeben;

Der 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);
int rdiv = gChild.teilen();
System.aus.println (rdiv);

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.