我想了解Java構造函數super()
。讓我們來看看以下課程:瞭解Java超級()構造函數
class Point {
private int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public Point() {
this(0, 0);
}
}
該課程將編譯。如果我們創建一個新的Point
對象說Point a = new Point();
沒有參數的構造函數將被調用:Point()
。
糾正我,如果我錯了,在做this(0,0)
之前,Class
構造函數將被調用,只有Point(0,0)
將被調用。 如果這是真的,說默認調用super()
是否正確?
現在,讓我們看看相同的代碼與一個小的變化:現在
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);
}
}
,代碼將無法編譯,因爲this(0,0)
不在構造函數的第一線。這是我感到困惑的地方。爲什麼代碼不能編譯?無論如何都不會調用super()
? (如上所述的類構造函數)。
點不是子類。想象一下,如果我們有一個子類PrettyPoint,那麼PrettyPoint(){super(0,0); }會從上面調用Point(int x,int y)。 – ZeldaZach
這將幫助你理解:https://stackoverflow.com/questions/10381244/why-cant-this-and-super-both-be-used-together-in-a-constructor –
@ZeldaZach一切都是一個子類'對象'。 –