*来自对构造函数的继承,及相关调用思考得到,主要还是从《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)
*枚举类
*具有实例缓存的类
*具有实例缓存的不可变类