Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung der Verwendung des Super-Schlüsselworts in Java

Detaillierte Erläuterung der Verwendung des Super-Schlüsselworts in Java

黄舟
黄舟Original
2017-10-14 09:35:071908Durchsuche

In diesem Artikel werden hauptsächlich die relevanten Informationen zur Verwendung des Java-Super-Schlüsselworts im Detail vorgestellt. Ich hoffe, dass dieser Artikel jedem helfen kann, einen umfassenden Überblick über das Super-Schlüsselwort zu erhalten

Das Schlüsselwort super in der Konstruktormethode

In der Konstruktormethode einer Java-Unterklasse kann das Schlüsselwort super verwendet werden, um die Konstruktormethode der übergeordneten Klasse aufzurufen. Seine Verwendung ist:

1) super(); Zugriff auf den Parameterlosen Konstruktor in der übergeordneten Klasse

2) Super (paras…); Zugriff auf den Parameterlosen Konstruktor in der übergeordnete Klasse Die Mitgliedsfunktion yyy

super() ruft den parameterlosen Konstruktor der übergeordneten Klasse auf, aber selbst wenn super() nicht verwendet wird, wird standardmäßig der parameterlose Konstruktor der übergeordneten Klasse aufgerufen. Der Parameterlose Konstruktor der übergeordneten Klasse kann ein benutzerdefinierter Parameterloser Konstruktor oder ein vom Compiler automatisch generierter Standardkonstruktor sein. Wenn jedoch in der übergeordneten Klasse ein parametrisierter Konstruktor, aber kein Parameterloser Konstruktor definiert ist, generiert der Compiler keinen Standardkonstruktor und der Konstruktor kann nicht über super () aufgerufen werden. Wenn in der übergeordneten Klasse außerdem ein privater Konstruktor ohne Argumente definiert ist, kann dieser nicht über super() aufgerufen werden.

super(paras…); wird verwendet, um einen parametrisierten Konstruktor in der übergeordneten Klasse aufzurufen.

super ruft den Konstruktor der übergeordneten Klasse auf und muss in der ersten Zeile des Konstruktors der Unterklasse ausgeführt werden. Wenn ein übergeordneter Klassenkonstruktor mit Parametern aufgerufen wird, können nicht-statische Mitgliedsvariablen in der Unterklasse nicht in den Superparametern verwendet werden (statische Mitgliedsvariablen können verwendet werden, da statische Mitgliedsvariablen vor der Ausführung des Konstruktors initialisiert wurden) und auch nicht Verwandte Aufrufe zu this oder super verwendet werden. Zum Beispiel super(super.getClass().getName());

Sie können auch das Schlüsselwort super im Konstruktor verwenden, um auf Mitgliedsvariablen und Mitgliedsfunktionen in der übergeordneten Klasse zuzugreifen. Seine Verwendung ist die gleiche wie die Verwendung des Super-Schlüsselworts in Nicht-Konstruktor-Methoden.

Das Schlüsselwort super in Nicht-Konstruktor-Methoden

In einer Java-Unterklasse können Sie das Schlüsselwort super verwenden, um Mitgliedsvariablen und Methoden in der übergeordneten Klasse aufzurufen. Seine Verwendung ist.

1) super.xxx; Zugriff auf die Member-Variable xxx in der übergeordneten Klasse
2) super.yyy(paras…); Zugriff auf die Member-Funktion yyy in der übergeordneten Klasse

Das Schlüsselwort super darf beim Zugriff auf Mitgliedsvariablen und Mitgliedsfunktionen der übergeordneten Klasse die Zugriffsberechtigungskontrolle nicht überschreiten und nicht auf private Mitgliedsvariablen und -methoden in der übergeordneten Klasse zugreifen. Beispiel:


class a {
  private int mNum = 0;
}
class b extends a {
  public void setNum(int i) {
    super.mNum = i;   //错误,不能访问父类的private成员
  }
}

Wenn es mehrere Ebenen von Vererbungsbeziehungen gibt, kann Super nur Mitgliedsvariablen und Methoden seiner eigenen übergeordneten Klasse aufrufen und die übergeordnete Klasse nicht direkt aufrufen Klasse außerhalb der übergeordneten Klasse. Wenn die Mitgliedsvariablen oder -methoden in der übergeordneten Klasse der übergeordneten Klasse von der übergeordneten Klasse geerbt werden, können die Mitgliedsvariablen und -methoden natürlich über super aufgerufen werden, zu diesem Zeitpunkt jedoch die Mitgliedsvariablen und -methoden in der übergeordneten Klasse tatsächlich angerufen. Zum Beispiel:


class a {
  protected int mNum = 0;
  public void setNum(int i) {
    mNum = i;
  }
}
class b extends a {
  public void setNum(int i) {
    mNum = i * i;
  }
}
class c extends b {
  public void setNum(int i) {
    super.setNum(i);    //调用的是b中的setNum()方法
    super.super.setNum(i); //错误,不支持的用法
  }
}


class a {
  protected int mNum = 0;
  public void setNum(int i) {
    mNum = i;
  }
}
class b extends a {
}
class c extends b {
  public void setNum(int i) {
    super.setNum(i);  //正确,虽然b中没有实现setNum(),但b中继承了a的setNum()函数,
              //c中调用super.setNum()调用的是b的setNum()函数,可以执行。
  }
}

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung des Super-Schlüsselworts in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn