Ich spreche Java-Sprache.
Die Variable "this" verweist bei Verwendung innerhalb einer Klasse auf die aktuelle Instanz dieser Klasse, was bedeutet, dass Sie "this" nicht innerhalb einer statischen Methode verwenden können.
Aber "super", wenn es innerhalb einer Klasse verwendet wird, bezieht sich auf die Oberklasse dieser Klasse, nicht auf eine Instanz der Oberklasse, was bedeutet, dass Sie "super" in einer statischen Methode verwenden können. Aber es stellt sich heraus, dass du es nicht kannst.
Eine mögliche Erklärung wäre zu sagen, dass "super" sich auch auf eine Instanz der Oberklasse bezieht, aber ich kann nicht verstehen, warum es so aussehen sollte ...
Hier ist der Abschnitt in der JLS über das Schlüsselwort super
:
Das Formular
super.Identifier
bezieht sich auf das Feld mit dem Namen Identifier des aktuelles Objekt, aber mit dem aktuellen Objekt als Instanz von die Oberklasse der aktuellen Klasse.Das Formular
T.super.Identifier
verweist auf das Feld mit dem Namen Identifier of die lexikalisch umschließende Instanz entspricht T, aber damit Instanz als eine Instanz der Superklasse von T angezeigt.
In beiden Fällen ist es klar, dass ein Instanzobjekt benötigt wird.
Außerdem unterscheidet sich ein statischer Kontext etwas von einem Instanzkontext, da eine Klasse statische Methoden nicht überschreiben kann, sondern sie nur ausblenden kann.
Sie können super
nicht aus einem statischen Kontext verwenden, aus dem gleichen Grund, weil Sie this
nicht in einem statischen Kontext verwenden können. In beiden Fällen bezieht sich das Wort auf eine Instanz.
In einem statischen Kontext können Sie den Namen der Oberklasse immer explizit verwenden:
%Vor%Lassen Sie uns die Verwendung und Bedeutung des statischen Keywords verstehen. Das Schlüsselwort static wird hauptsächlich in Java für eine effiziente Speicherverwaltung verwendet. Das Schlüsselwort static kann auf Variablen, Methoden, Blöcke und verschachtelte Klassen angewendet werden.
Dasstatische Schlüsselwort gehört zur Klasse und nicht zur Instanz der Klasse. Wenn eine Methode als static deklariert ist, kann nur auf ihren Klassennamen zugegriffen werden. Die statische -Methode kann nur auf ihre statischen Datenelemente und -methoden zugreifen. Es kann nicht auf nicht statische Elemente, z. B. Instanzvariablen, zugreifen.
Super Schlüsselwort: Es hat die folgenden Verwendungszwecke,
Es ist ein Schlüsselwort, das eine Referenzvariable ist, die verwendet wird, um auf das Elternklassenobjekt zu verweisen. Es wird verwendet, um Elternklassenmethoden aufzurufen. Super () wird zum Aufrufen des übergeordneten Klassenkonstruktors verwendet. Das Super-Schlüsselwort wird verwendet, um auf die Instanzvariablen der Elternklasse zuzugreifen. Aus den oben genannten Gründen kann das Schlüsselwort Super nicht unter der statischen Methode verwendet werden. Es kann nur in einem nicht statischen Kontext verwendet werden.
Dieses Schlüsselwort: Es hat die folgenden Verwendungszwecke,
Es kann verwendet werden, um auf die aktuelle Klasseninstanzvariable zu verweisen. Es wird verwendet, um auf das aktuelle Klassenobjekt zu verweisen (das Objekt, dessen Konstruktor oder Methode aufgerufen wird). Mit this können Sie auf ein Mitglied des aktuellen Objekts innerhalb einer Instanzmethode oder eines Konstruktors verweisen. Jetzt sind statische Methoden mit der Klasse und nicht mit den Objekten verknüpft, dies kann nicht innerhalb von statischen Methoden verwendet werden.