*來自對構造函數的繼承,及相關調用思考得到,主要還是從《java面向對象編程》得來
*在多級繼承的情況下,將從繼承樹的最上層的父類開始,依次執行各個類的構造方法,
這可以保證子類對象從所有直接或間接父類中繼承來的實例都被正確的初始化。
*當子類的構造方法沒有用super語句顯示的調用父類的構造方法,而父類中又沒有提供默
認的構造方法(jdk提供的默認構造方法)時,將會出現編譯錯誤。
public class Grapha {
// public Grapha() {
// System.out.println("Grapha()");
// }
public Grapha(String name) {
System.out.println("Grapha()");
}
}
class Father extends Grapha{
/**
* a compile error happen.
* implicit super constructor Grapha() is undifined,must explicity invoke another constructor
**/
public Father() {
System.out.println("Father()");
}
/**
* a compile error happen.
* implicit super constructor Grapha() is undifined,must explicity invoke another constructor
**/
public Father(String name){
}
}
*從上面可以得出,如果一個類即不允許其他程序員用new語句來構造它的實例,又不允許它有子類,就可以
把它所有的構造方法定義為private的。
另外一種使一個類不能有子類的方法是將類聲明改為final的。
由上面可以想到用靜態工廠模式:
*單例模式(singleton)
*枚舉類
*具有實例緩存的類
*具有實例緩存的不可變類