this
this ist ein Objekt von sich selbst und repräsentiert das Objekt selbst. Es kann verstanden werden als:Ein Zeiger auf das Objekt selbst。
Die Verwendung von this in Java lässt sich grob in 3 Arten unterteilen:
1. Gewöhnliche direkte Referenz
Darauf muss nicht näher eingegangen werden; this entspricht dem Verweisen auf das aktuelle Objekt selbst.
2. Wenn formale Parameter denselben Namen wie Member haben, verwenden Sie this zur Unterscheidung:
Beispiel
Ausgabe:
初始化年龄:10 Harry's age is 12
Man erkennt, dass age hier der formale Parameter der GetAge-Mitgliedsmethode ist und this.age die Mitgliedsvariable der Person-Klasse ist.
3. Verweis auf Konstruktoren
Dies wird zusammen mit super besprochen, siehe unten.
super
super kann als Zeiger auf das Objekt seiner Superklasse (Elternklasse) verstanden werden, und diese Superklasse bezieht sich auf die nächstgelegene Elternklasse.super hat außerdem drei Verwendungsweisen:
1. Gewöhnliche direkte Referenz
Ähnlich wie this ist super gleichbedeutend mit dem Verweis auf die Elternklasse des aktuellen Objekts, daher können Siesuper.xxxverwenden, um auf Mitglieder der Elternklasse zu verweisen.
2. Wenn Mitgliedsvariablen oder Methoden in der Unterklasse denselben Namen wie die in der Elternklasse haben
Beispiel
Ausgabe:
Shanghai China
Es ist zu sehen, dass hier sowohl die Methode der Elternklasse als auch die Variable der Elternklasse aufgerufen werden. Wenn die Methode value() der Elternklasse nicht aufgerufen wird und nur die Variable name der Elternklasse verwendet wird, dann hat der Wert der Variable name der Elternklasse den Standardwert null.
3. Verweis auf Konstruktoren
- super(parameters): Ruft einen Konstruktor in der Elternklasse auf (sollte die erste Anweisung im Konstruktor sein).
- this(parameters): Ruft eine andere Form des Konstruktors in dieser Klasse auf (sollte die erste Anweisung im Konstruktor sein).
Beispiel
Ausgabe:
父类·无参数构造方法: A Person. 子类·调用父类”无参数构造方法“: A chinese coder. 父类·含一个参数的构造方法: A person's name is codersai 子类·调用父类”含一个参数的构造方法“: his name is codersai 父类·含一个参数的构造方法: A person's name is codersai 子类·调用父类”含一个参数的构造方法“: his name is codersai 子类:调用子类具有相同形参的构造方法:his age is 18
Aus diesem Beispiel können wir ersehen, dass super und this verwendet werden können, um den Konstruktor der Elternklasse bzw. andere Formen von Konstruktoren in dieser Klasse aufzurufen.
Im Beispiel ruft der dritte Konstruktor der Klasse Chinese den zweiten Konstruktor dieser Klasse auf, und der zweite Konstruktor ruft die Elternklasse auf. Daher muss zuerst der Konstruktor der Elternklasse aufgerufen werden, dann der zweite Konstruktor dieser Klasse, und schließlich wird der dritte Konstruktor umgeschrieben.
Gemeinsamkeiten und Unterschiede zwischen super und this
- super(parameters): Ruft einen Konstruktor in der Basisklasse auf (sollte die erste Anweisung im Konstruktor sein)
- this(parameters): Ruft eine andere Konstruktorform in dieser Klasse auf (sollte die erste Anweisung im Konstruktor sein)
- super: Es referenziert Member in der direkten Elternklasse des aktuellen Objekts (wird verwendet, um auf Memberdaten oder Funktionen der Elternklasse zuzugreifen, die in der direkten Elternklasse verdeckt sind. Wenn die Basisklasse und die abgeleitete Klasse dieselben Memberdefinitionen haben, z. B. super.variableName super.memberFunctionName(actual parameters)). this: Es repräsentiert den Namen des aktuellen Objekts (wo im Programm leicht Mehrdeutigkeit auftreten kann, verwenden Sie this, um das aktuelle Objekt anzugeben; wenn die formalen Parameter der Funktion denselben Namen wie die Memberdaten in der Klasse haben, verwenden Sie this, um den Namen der Membervariable anzugeben).
- Der Aufruf von super() muss als erste Zeile des Konstruktors der Unterklasse geschrieben werden, sonst schlägt die Kompilierung fehl. Die erste Anweisung jedes Konstruktors der Unterklasse ruft implizit super() auf. Wenn die Elternklasse keinen Konstruktor dieser Form hat, wird während der Kompilierung ein Fehler gemeldet.
- super() und this() sind ähnlich. Der Unterschied besteht darin, dass super() den Konstruktor der Elternklasse aus der Unterklasse aufruft, während this() andere Methoden innerhalb derselben Klasse aufruft.
- Sowohl super() als auch this() müssen als erste Zeile im Konstruktor stehen.
- Obwohl this verwendet werden kann, um einen Konstruktor aufzurufen, kann es nicht zwei aufrufen.
- this und super können nicht gleichzeitig in einem Konstruktor auftreten, weil this unweigerlich einen anderen Konstruktor aufruft und dieser andere Konstruktor unweigerlich eine super-Anweisung enthält. Daher verliert dieselbe Anweisung im selben Konstruktor ihre Bedeutung, und der Compiler wird sie nicht akzeptieren.
- Sowohl this() als auch super() beziehen sich auf Objekte, daher können sie nicht in einer statischen Umgebung verwendet werden. Einschließlich: statische Variablen, statische Methoden, statische Anweisungsblöcke.
- Im Wesentlichen ist this ein Zeiger auf dieses Objekt, während super ein Java-Schlüsselwort ist.
Original-Link: https://www.cnblogs.com/hasse/p/5023392.html