回顧基礎知識:this
1.若是一個類中沒有定義構造器,編譯器在編譯時會自動加上默認無參構造器spa
定義格式:public ClassName() {}ci
2. this 和 super 的區別。編譯器
3.每一個類直接或間接是Object的子類,Object只有一個無參構造方法。it
4.編譯器會在每一個構造方法的第一行隱式添加父類的默認無參構造器,即添加super()。編譯
容易犯的錯誤:class
class Family extends Object {基礎
public Family(int member) {方法
}ember
}
class Father extends Family {
public Father() {
}
}
以上代碼會產生編譯錯誤:
Implicit super constructor Family() is undefined. Must explicitly invoke another constructor
由於父類定義了一個帶參數的構造器,所以編譯器不會添加默認無參構造方法,
可是由於在子類的構造器中沒有顯式調用父類的某個構造方法,所以編譯器會自動添加super()方法,
可是父類中不存在默認無參構造方法,所以會提示默認無參構造方法未定義錯誤。
修改後的代碼:
class Family extends Object {
public Family(int member) {
}
}
class Father extends Family {
public Father() {
super(6);
}
}
這樣,在子類的構造器中顯式調用了父類的某個構造器,因此編譯器不會自動添加super()方法。