Verwendung super/ This Java?

1 Antwort

Vom Beitragsersteller als hilfreich ausgezeichnet
  • super zeigt auf die Basisklasse. Darüber kannst du also explizit auf Felder und Methoden aus der Basisklasse zugreifen.
  • super() ist für den Aufruf eines Basiskonstruktors. Die Argumentenliste entscheidet, welcher Basiskonstruktor aufgerufen wird.
  • this zeigt auf die aktuelle Instanz der Klasse, über die auf ein Feld zugegriffen oder über die eine Methode aufgerufen wurde.
  • this() ist für den Aufruf eines Konstruktors der Klasse. Die Argumentenliste entscheidet, welcher Konstruktor aufgerufen wird.

Beispiel:

class Base {
  public Base() {
    this(5); // call other constructor
  }

  public Base(int value) {
    /* ... */
  }

  public void doSomething() {
    /* ... */
  }
}

class Sub extends Base {
  private int value;

  public Sub(int value) {
    super(value); // call base constructor

    this.value = value; // set field value
  }

  @Override
  public void doSomething() {
    super.doSomething(); // call method from base
    /* ... */
  }
}

Für eine Programmanalyse könnte man beispielsweise einen statischen Aufrufbaum erstellen, der also darstellt, welche Methoden in welcher Reihenfolge von welchem Programmelement aufgerufen werden. Wenn man so eine Analyse vornimmt, sollte man folglich auch wissen, was die oben genannten Begriffe tun. Um die Analyse zu vereinfachen, könnte man stets explizit auf Felder/Methoden zugreifen, selbst wenn es nicht nötig ist.

Beispiel:

class Base {
  protected int value;
}

class Sub extends Base {
  public Sub() {
    super.value = 123; // explicit
    value = 456; // implicit
  }
}

Da Sub das geerbte Feld value nicht überdeckt, benötigt man keinen expliziten Zugriff über das Schlüsselwort super. Man kann das Schlüsselwort aber verwenden, um extra deutlich zu machen, von woher das Feld kommt.