Ich lerne gerade in meinem Java-Kurs etwas über Klassenvererbung und verstehe nicht, wann ich den super()
Aufruf verwenden soll.
Bearbeiten:
Ich habe dieses Beispiel für Code gefunden, in dem verwendet wird:super.variable
class A
{
int k = 10;
}
class Test extends A
{
public void m() {
System.out.println(super.k);
}
}
Ich verstehe also, dass Sie hier verwenden müssen, super
um auf die k
Variable in der Superklasse zuzugreifen . Was macht super();
es jedoch in jedem anderen Fall ? Allein?
java
inheritance
super
muttley91
quelle
quelle
super
keine Referenz erforderlichk
.k
kann direkt referenziert werden.super
Der Zugriff wäre nur erforderlich,A.k
wenn Sie ein anderes Feld mit dem Namenk
inTest
(Test.k
) deklariert hätten .Antworten:
Genaues Anrufen
super()
ist immer überflüssig. Es wird explizit das getan, was implizit anders gemacht würde. Dies liegt daran, dass der Super-Konstruktor ohne Argumente ohnehin automatisch aufgerufen wird, wenn Sie den Super-Konstruktor nicht aufrufen. Um nicht zu sagen, dass es ein schlechter Stil ist; Manche Leute mögen es explizit zu sein.Es ist jedoch nützlich, wenn der Superkonstruktor Argumente verwendet, die Sie aus der Unterklasse übergeben möchten.
quelle
super
verwendet , um die zu nennenconstructor
,methods
undproperties
der übergeordneten Klasse.quelle
Sie können das
super
Schlüsselwort auch in der Unterklasse verwenden, wenn Sie eine Methode aus der übergeordneten Klasse aufrufen möchten, wenn Sie sie in der Unterklasse überschrieben haben.Beispiel:
Hier
super.print()
ruft die Zeile dieprint()
Methode der Oberklasse aufCellPhone
. Die Ausgabe wird sein:quelle
Wenn Sie möchten, dass der Superklassenkonstruktor aufgerufen wird, um die darin enthaltenen Felder zu initialisieren. In diesem Artikel erfahren Sie, wann Sie ihn verwenden müssen:
http://download.oracle.com/javase/tutorial/java/IandI/super.html
quelle
super()
, wie Java implizit hinzufügen. Sie müssen jedoch aufrufen,super(args)
wenn Sie einen nicht standardmäßigen übergeordneten Konstruktor benötigen.Sie würden es als erste Zeile eines Unterklassenkonstruktors verwenden, um den Konstruktor seiner übergeordneten Klasse aufzurufen.
Beispielsweise:
Das Erstellen einer Instanz von
TheSub
würde sowohleatCake()
als auch aufrufeneatMoreCake()
quelle
Sie können es verwenden, um die Methode einer Oberklasse aufzurufen (z. B. wenn Sie eine solche Methode überschreiben, super.foo () usw.). Auf diese Weise können Sie diese Funktionalität beibehalten und mit allem, was Sie sonst noch in der Überschreibung haben, ergänzen Methode.
quelle
Super ruft Ihre übergeordnete Methode auf. Siehe: http://leepoint.net/notes-java/oop/constructors/constructor-super.html
quelle
Sie rufen
super()
auf, um speziell einen Konstruktor Ihrer Oberklasse auszuführen. Da eine Klasse mehrere Konstruktoren haben, können Sie entweder einen bestimmten Konstruktor aufrufen mitsuper()
odersuper(param,param)
oder Sie können Java Griff lassen , dass und rufen Sie den Standard - Konstruktor. Denken Sie daran, dass Klassen, die einer Klassenhierarchie folgen, der "is-a" -Beziehung folgen.quelle
Die erste Zeile des Konstruktors Ihrer Unterklasse muss ein Aufruf sein,
super()
um sicherzustellen, dass der Konstruktor der Oberklasse aufgerufen wird.quelle
super(some args)
nicht aufrufensuper()
. Aber der Punkt ist, "muss" ist falsch. Einer der Konstruktoren der Superklasse wird garantiert aufgerufen, solange die Klasse kompiliert wird.super(...)
. Es besteht absolut keine Gefahr dafür. nur Gefahr, dass es nicht kompiliert wird.Ich habe es gerade versucht und super () kommentiert; macht das Gleiche, ohne es zu kommentieren, wie @Mark Peters sagte
quelle
Von der Oracle - Dokumentation Seite :
Sie können auch verwenden
super
, um auf ein verstecktes Feld zu verweisen (obwohl das Ausblenden von Feldern nicht empfohlen wird).Verwendung
super
im Konstruktor von Unterklassen:Die Syntax zum Aufrufen eines Konstrukts der Oberklasse lautet
oder:
Mit
super()
wird der Konstruktor der Superklasse ohne Argumente aufgerufen. Mitsuper(parameter list)
wird der Superklassenkonstruktor mit einer übereinstimmenden Parameterliste aufgerufen.Hinweis: Wenn ein Konstruktor einen Superklassenkonstruktor nicht explizit aufruft, fügt der Java-Compiler automatisch einen Aufruf an den Konstruktor ohne Argumente der Superklasse ein . Wenn die Superklasse keinen Konstruktor ohne Argumente hat, wird ein Fehler zur Kompilierungszeit angezeigt.
In Verbindung stehender Beitrag:
Polymorphismus vs Überschreiben vs Überladen
quelle