Aufruf von super am Ende
ich bin wirklich verwirrt von der Art, wie Menschen verwenden Sie super-in überschriebenen Methoden .
Wie, was ist der Unterschied zwischen
@Override
protected void onResume() {
//some logic here
super.onResume();
}
und
@Override
protected void onResume() {
super.onResume();
//some logic here
}
Leistung bringt es irgendwelche vor-Verarbeitung, wenn wir den Aufruf super() am Ende , denn in der Regel nennen wir super zu initialisieren übergeordneten Konstruktor.
Keinen Unterschied in der Leistung beider Arten.
- stackoverflow.com/questions/4994959/...
- Du verwechselst Konstruktor ruft die Methode Aufrufe (
super.method()
. Auch der code nicht kompilieren. - Superklasse ZUERST:
onRestoreInstanceState، onStop, onRestart, onStart
. Ihre codes auf den ERSTEN:onDestroy, onPause, onSaveInstanceState, onResume
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, plain
super()
ist nicht erlaubt in Methoden überhaupt - nur in Konstruktoren. Ich nehme an, Sie meinte eigentlichsuper.someMethod()
für eine geeignete Methode.Mit
super
in einer Methode ist etwas anders, um es auch in einem Konstruktor.In einem Konstruktor
super
(oderthis
) ist erforderlich zu der ersten Anweisung (wenn Sie vorhanden ist, mit einem implizitensuper()
sonst) und es kann nur Aufruf eines Konstruktors.In eine Methode, mit
super.someMethod()
ruft einfach die Oberklasse Umsetzung vonsomeMethod
. Sie können es nennen, von alle Methode (die Sie nicht haben, um das überschreibensomeMethod
zu der Zeit) und rufen Sie es an beliebiger Stelle in der Methode. Es ist aufgerufen, an der Stelle, die Sie es nennen, es verhindert nur, dass der polymorphe Aufruf zu einer überwiegenden Umsetzung.Also im Grunde, wo - und ob - Sie nennen es hängt davon ab, was der Effekt sein. In einigen Fällen werden Sie kann möchten, rufen Sie die Oberklasse Implementierung der gleichen Methode vor Ihrem eigenen Verhalten, und in einigen Fällen, die Sie kann wollen, nennen Sie es nach Ihrem eigenen Verhalten.
onRestoreInstanceState، onStop, onRestart, onStart
.super.foo()
. Wenn Sie mir nicht glauben, versuchen Sie es.Dass hängt wirklich von der Logik, die die Methode implementiert. Manchmal ist es zum ersten mal aufgerufen wird, manchmal am Ende und manchmal nie. Zum Beispiel, wenn einige Berechnung von superclass-Methode ist wirklich wichtig, dann wird es zuerst aufgerufen werden. Oder wenn-Berechnung wird versucht, in der Unterklasse die Methode aber ohne ein gutes Ergebnis (Ergebnis null) wird versucht, auf Unterklasse-Methode. Es ist wirklich keine gute Antwort auf diese Frage, außer, dass es wirklich hängt.
Beispiel 1:
Einen label-Anbieter, der extrapoliert Zeit von der
Date
- Objekt und gibt es zurück auf die Benutzeroberfläche zeigt:Einen label-Anbieter, der extrapoliert sowohl Datum und Uhrzeit von der
Date
- Objekt und gibt es zurück auf die Benutzeroberfläche zeigt:Beispiel 2:
Wenn Ihr Projekt hat eine Tiefe Klassenhierarchie für Elemente der Benutzeroberfläche, z.B.
Nun jeder der Klassen Hinzugefügt, einige UI-Elemente auf dem Feld, zum Beispiel
DropDownField
ein Menü Hinzugefügt und einen kleinen Pfeil rechts neben dem FeldTextField
ein validator Hinzugefügt,AbstractTextField
Hinzugefügt, ein weißer block, text zu schreiben, etc... Zu entsorgen-Elemente, die Sie würden tun müssen, mehrstufige Verfügung, wie diese:Werfen Sie einen Blick auf okPressed () - Methode für das swt-Dialoge. In der Regel Menschen überschreiben okPressed auf einen dialog, um einige der gewünschten arbeiten. Die super.okPressed() in der Regel verfügt der dialog nichts zu tun. So heißt es am Ende, nachdem alle Ihre Arbeit getan ist.
Dem Schlüsselwort super ist ein Weg, der zum aufrufen einer Elternklasse Verhalten in einer spezialisierten Klasse.
In einem Konstruktor aufrufen
können Sie wählen, welcher Konstruktor der übergeordneten Klasse verwendet werden soll.
In einer Methode aufrufen
lassen, rufen Sie die übergeordnete Klasse von Verhalten, selbst wenn aktuellen Klasse überschreiben parentMethod. In der Regel ist es verwendet werden würde, um einige Logik vor oder nach der übergeordneten Klasse.
Aufrufen
in einer Methode wird nicht kompiliert, da Sie verwendet den Konstruktor der super-syntax in einer Methode.
davon, ob Sie einen Rückruf, um die super-Methode in der ersten Zeile oder der letzten Zeile der Methode ... es hängt von der Semantik der super-Methode. in anderen Worten, es gibt keine Möglichkeit zu wissen, andere als Blick auf die Dokumentation (oder code) für die Methode. es kann auch Fälle geben, in denen Sie nicht möchten, um den Anruf durch, um die super-Methode auf, alle.
Sie scheinen zu Fragen über
onResume()
. während die ärzte nicht sagen, das Muster, das ich schon immer verwendet, ist der Aufruf zurück an die super-Methode in der ersten Zeile. füronPause()
, ich rufe zurück, in der letzten Zeile. die Idee ist, dass die super-Methoden zu wickeln Sie Ihre benutzerdefinierten anhalten - /fortsetzen-Logik ...