Frage von tobin1997, 89

Unterschied zwischen this() und super() in Java?

Expertenantwort
von KnusperPudding, Community-Experte für Java, 31

Angenommen du hast eine Klasse: Tier, mit einer getter-Methode: "getBezeichnung", welche als Rückgabewert den String "Tier" zurück liefert.

public class Tier {
   
  public String getBezeichnung() {
     return "Tier";
  }
}

Sowie eine Klasse Hund, die von Tier erbt. und nun die Methode getBezeichnung überschreibt:

public class Hund extends Tier {

   @Override
   public String getBezeichnung() {
      return "Hund";
   }
}

Und du möchtest innerhalb der Klasse Hund auf eine Bezeichnung referenzieren.

so erhälst du mit:

this.getBezeichnung();

Den Rückgabewert der aktuellen Klasse: Hund.

Und mit:

super.getBezeichnung();

den Rückgabewert der Klasse, von der man erbt: "Tier".

Kommentar von KnusperPudding ,

Ergänzung, da ich die Klammer übersehen habe:

this();

ruft den aktuellen Konstruktor.

super();

den Konstruktor der Klasse, von welcher man erbt.

Antwort
von Borgler94, 61

Eine Antwort von Stack Overflow (Erick Robertson):

this is a reference to the object typed as the current class, and super is a reference to the object typed as its parent class.

In the constructor, this() calls a constructor defined in the current class. super() calls a constructor defined in the parent class. The constructor may be defined in any parent class, but it will refer to the one overridden closest to the current class. Calls to other constructors in this way may only be done as the first line in a constructor.

Calling methods works the same way. Calling this.method() calls a method defined in the current class where super.method() will call the same method as defined in the parent class.

Quelle: http://stackoverflow.com/questions/4023344/difference-between-this-andsuper-keyw...

Antwort
von TUrabbIT, 57

This() ist ein Verweis auf diese Klasse und Ihre Methoden.
super() ist ein Verweis auf die Super Klasse, also die darüber liegende Klasse. Bei Default ist das die Klasse Object

Kommentar von KnusperPudding ,

Hab's auch erst gerade bemerkt: hinter dem this() und super() sind noch Klammern und somit sind jeweils die Konstuktoren der aktuellen oder Vererbenden Klasse gemeint.

Aber natürlich lässt sich die Logik von this und super auf this() und super() übertragen.

Antwort
von RakonDark, 45

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten