http://blog.sina.com.cn/s/blog_4d4f34b001016k61.html
在开始学习单例设计模式的时候,没搞清楚是否能被继承,所以动手去测试一下:
public class Single_Extends_Test {
public static void main(String[] args) {
//Single s = new Single(); 这个实例化是要调用Single的构造函数,被privat修饰,不能实例化
//Single s = new Single2(); 这个是调用的Single的子类来实例化
Single s = new Single(3); 显示的通过另一个构造函数来实例化
s.print();
}
}
class Single
{
private static Single s = new Single();
private Single(){}
public static Single getInstance()
{
return s;
}
public void print()
{
System.out.println("饿汉式——单例设计模式");
}
Single(int x) //这个没有定义成私有
{
System.out.println("Single");
}
}
class Single2 extends Single
{
Single2()
{
super(3); //在继承中,在子类的构造函数中,也会调用父类的构造函数,如果没有指明,
//则会是默认的super();
System.out.println("测试");
}
}
总结:
在单例设计模式中,一般情况下是不能被继承的,因为它的构造函数被私有化了,在子类中的构造函数要调用父类的默认构造函数super()来完成自己的构造函数。
最开始的时候是看一看单例设计模式能不能被继承,通过提供其他的构造函数就能够在子类中显示的调用并完成初始化,不过这样一来,这个按照单例设计模式设计的类就偏离了它最初设计的目的。
不过通过这一测试,知道不能被继承的原因是因为在类中,私有化了构造函数,这样就不能够被继承,因为平常在继承的时候,子类的构造函数都会隐式的调用父类的构造函数。