Ich versuche, Java super()
Konstruktor zu verstehen. Werfen wir einen Blick in die folgende Klasse:Verstehen Java super() Konstruktor
class Point {
private int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public Point() {
this(0, 0);
}
}
Diese Klasse wird kompiliert. Wenn wir ein neues Point
Objekt say Point a = new Point();
erstellen, wird der Konstruktor ohne Parameter aufgerufen: Point()
.
Korrigieren Sie mich, wenn ich falsch liege, bevor Sie this(0,0)
tun, wird der Class
Konstruktor aufgerufen und nur dann Point(0,0)
wird aufgerufen. Wenn das wahr ist, ist es richtig zu sagen, dass super()
standardmäßig aufgerufen wird?
jetzt ist auf dem gleichen Code mit einer kleinen Änderung aussehen lassen:
class Point {
private int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public Point() {
super(); // this is the change.
this(0, 0);
}
}
Nun wird der Code kompiliert, da this(0,0)
nicht in der ersten Zeile des Konstruktors ist. Hier werde ich verwirrt. Warum wird der Code nicht kompiliert? Wird nicht super()
trotzdem aufgerufen? (Der Klassenkonstruktor wie oben beschrieben).
Point ist keine Unterklasse. Stellen wir uns vor, wir hätten eine Unterklasse PrettyPoint, dann PrettyPoint() {super (0,0); } würde Point (int x, int y) von oben aufrufen. – ZeldaZach
Dies wird Ihnen helfen zu verstehen: https://stackoverflow.com/questions/10381244/why-cant-this-and-super-both-be-used-together-in-a-constructor –
@ZeldaZach Alles ist eine Unterklasse von 'Objekt'. –