本帖最后由 25343215 于 2013-12-7 09:30 编辑
楼主见下面代码分析:
- 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()来完成自己的构造函数。最开始的时候是看一看单例设计模式能不能被继承,通过提供其他的构造函数就能够在子类中显示的调用并完成初始化,不过这样一来,这个按照单例设计模式设计的类就偏离了它最初设计的目的。
不过通过这一测试,知道不能被继承的原因是因为在类中,私有化了构造函数,这样就不能够被继承,因为平常在继承的时候,子类的构造函数都会隐式的调用父类的构造函数。
|