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

3 Antworten

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

KnusperPudding  06.10.2016, 15:39

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.

0

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-keywords-in-java

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

KnusperPudding  06.10.2016, 15:36

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

this();

ruft den aktuellen Konstruktor.

super();

den Konstruktor der Klasse, von welcher man erbt.

0
AndreyD  09.08.2017, 21:59
@KnusperPudding

Wofür braucht man eig einen Konstruktor der Superklasse? Theoretisch kann man doch alles auch ohne erledigen, oder?

0
KnusperPudding  28.08.2017, 12:31
@AndreyD

Es gibt viele Szenarien in denen ein Super-Konstruktor Sinn macht.

Wenn du beispielsweise Variablen in der Übergeordneten Klasse Initialisierst und dies im Konstruktor machst.

0