单例设计模式的继承问题

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()来完成自己的构造函数。
最开始的时候是看一看单例设计模式能不能被继承,通过提供其他的构造函数就能够在子类中显示的调用并完成初始化,不过这样一来,这个按照单例设计模式设计的类就偏离了它最初设计的目的。
不过通过这一测试,知道不能被继承的原因是因为在类中,私有化了构造函数,这样就不能够被继承,因为平常在继承的时候,子类的构造函数都会隐式的调用父类的构造函数

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值