Wenn ich mit super()?
Ich bin derzeit lernen über Klasse Vererbung in meinem Java-Kurs, und ich verstehe nicht, Wann die super()
nennen?
Edit:
Ich fand dieses Beispiel-code, wo super.variable
verwendet:
class A
{
int k = 10;
}
class Test extends A
{
public void m() {
System.out.println(super.k);
}
}
So, ich verstehe, dass hier, müssen Sie super
Zugriff auf die k
variable in der super-Klasse. Jedoch, in jedem anderen Fall, was bedeutet super();
tun? Auf seinen eigenen?
Tatsächlich, in diesem Beispiel
super
ist nicht erforderlich, um die Referenz k
. k
kann direkt verwiesen werden. super
würde nur nötig sein, um A.k
wenn Sie deklariert, ein weiteres Feld k
im Test
(Test.k
).InformationsquelleAutor muttley91 | 2010-11-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aufrufen genau
super()
ist immer überflüssig. Es ist explizit das zu tun, was implizit anders geht. Das ist, weil, wenn du weglassen, ein Aufruf des super-Konstruktors, der keine-argument super-Konstruktor wird automatisch aufgerufen, sowieso. Nicht zu sagen, dass es schlechter Stil ist; einige Leute wie explicit.Allerdings, wo es dann sinnvoll ist, wenn der super-Konstruktor Argumente übergeben möchten, in der von der Unterklasse.
Wenn Sie Fragen, wie ein Kind der Klasse umgehen kann, seine Eltern die Umsetzung, sondern rufen die Großeltern, das ist nicht möglich in Java.
InformationsquelleAutor Mark Peters
super
wird verwendet, um rufen Sie dieconstructor
,methods
undproperties
der übergeordneten Klasse.InformationsquelleAutor Zain Shaikh
Nutzen Sie auch die
super
Schlüsselwort in der sub-Klasse, wenn Sie wollen, um eine Methode aufzurufen, die von der übergeordneten Klasse, wenn Sie überschrieben haben, es in der Unterklasse.Beispiel:
Hier, die Linie
super.print()
ruft dieprint()
Methode der SuperklasseCellPhone
. Der Ausgang wird sein:InformationsquelleAutor Dhiraj Shekar
Wenn Sie möchten, dass die super-Klasse-Konstruktor aufgerufen werden - die Felder zu initialisieren. Werfen Sie einen Blick auf diese Artikel für ein Verständnis, wenn es zu benutzen:
http://download.oracle.com/javase/tutorial/java/IandI/super.html
super()
wie Java wird implizit hinzufügen. Du musst aber anrufensuper(args)
wenn Sie einen nicht-Standard-parent-Konstruktor.InformationsquelleAutor Jon
Verwenden Sie es als erste Zeile in einer Subklasse-Konstruktor-Aufruf der Konstruktor der übergeordneten Klasse.
Beispiel:
Erstellen einer Instanz von
TheSub
nennen würde beideeatCake()
undeatMoreCake()
InformationsquelleAutor TartanLlama
Könnten Sie es zum Aufruf einer superclass-Methode (wie, wenn Sie das überschreiben dieser Methode super.foo() usw.) - dies würde Ihnen erlauben, zu halten, dass Funktionalität und add-on, um es mit allem, was Sie sonst in der überschriebenen Methode.
InformationsquelleAutor AHungerArtist
Super wird, rufen Sie Ihren übergeordneten Methode. Siehe: http://leepoint.net/notes-java/oop/constructors/constructor-super.html
InformationsquelleAutor Ben Groot
Rufen Sie
super()
speziell führen Sie einen Konstruktor Ihrer Superklasse. Gegeben, dass eine Klasse kann mehrere Konstruktoren haben, können Sie entweder den Aufruf eines bestimmten Konstruktor mitsuper()
odersuper(param,param)
oder Sie können mit Java umgehen und rufen Sie den standard-Konstruktor. Denken Sie daran, dass die Klassen, die die Folgen einer Klassen-Hierarchie zu Folgen, die "ist-ein" - Beziehung.InformationsquelleAutor 0xCAFEBABE
Die erste Zeile in der Unterklasse' Konstruktor muss ein Aufruf an
super()
um sicherzustellen, dass der Konstruktor der Superklasse aufgerufen.Selbst wenn es keinen default-Konstruktor? Wie soll es wissen, was passieren?
Wenn es keinen default-Konstruktor, müssen Sie rufen Sie
super(some args)
, nichtsuper()
. Aber der Punkt ist, "müssen" ist falsch. Einer der super-Klasse Konstruktoren ist garantiert aufgerufen werden, solange die Klasse kompiliert.Ich hatte es nicht klar, dass, wenn ich schrieb, der super () - ich wusste gar nicht, dass ein Konstruktor ohne Parameter, ich hatte einfach keine Lust zu schreiben. Und ja, ich meinte, Sie brauchte es nennen, oder es wird nicht kompiliert, das ist, warum ich sagte, muss.
Wieder einmal brauchen Sie NICHT, einen expliziten Aufruf eines super-Konstruktors wenn es einen no-arg-Konstruktor der übergeordneten Klasse. Ein super-Konstruktor immer aufgerufen werden, wobei Ihre Formulierung macht es klingen wie du bist in Gefahr, ein super-Konstruktor nicht aufgerufen wird, wenn Sie nicht setzen
super(...)
. Es gibt absolut keine Gefahr, dass; nur die Gefahr, dass es nicht kompiliert.InformationsquelleAutor robev
Ich habe es gerade ausprobiert, kommentieren super(); macht das gleiche, ohne es zu kommentieren, da @Mark Peters sagte
InformationsquelleAutor user2567665
Aus der oracle-Dokumentation Seite:
Können Sie auch
super
zu finden, um ein verstecktes Feld (obwohl ausblenden von Feldern wird abgeraten).Verwendung von
super
im Konstruktor der Unterklassen:Die syntax für den Aufruf einer superclass-Konstruktor
oder:
Mit
super()
der Superklasse no-argument-Konstruktor aufgerufen wird. Mitsuper(parameter list)
, den superclass-Konstruktor mit einer entsprechenden Parameterliste aufgerufen.Hinweis: , Wenn ein Konstruktor nicht explizit aufrufen einer superclass-Konstruktor, der Java-compiler fügt automatisch einen Anruf zu der no-argument-Konstruktor der Oberklasse. Wenn die super-Klasse nicht über einen no-argument-Konstruktor, erhalten Sie einen Kompilierungsfehler.
Related post:
Polymorphismus vs Überschreiben vs. Überladen
InformationsquelleAutor Ravindra babu