Warum kann ich die Variable "super" nicht aus einem statischen Kontext verwenden, obwohl "super" auf die Elternklasse und NICHT auf eine Klasseninstanz verweist, im Gegensatz zu "this"?

7

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

    
PrashanD 01.01.2013, 17:56
quelle

4 Antworten

10

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.

    
Sean Patrick Floyd 01.01.2013, 18:00
quelle
11

Nein, super bezieht sich auf eine Instanz - dieselbe Instanz, auf die sich this bezieht - das aktuelle Objekt. Es ist nur eine Möglichkeit, Methoden und Felder in Superklassen zu referenzieren, die in der aktuellen Klasse überschrieben oder verborgen sind.

    
Sean Owen 01.01.2013 18:00
quelle
4

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%     
Ted Hopp 01.01.2013 18:00
quelle
2
%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.

Das

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

    
Ved Prakash 09.02.2017 12:50
quelle

Tags und Links