黑马程序员技术交流社区

标题: 抽象类和把类中构造函数私有的区别? [打印本页]

作者: ixiangfeng    时间: 2014-1-2 13:52
标题: 抽象类和把类中构造函数私有的区别?
突然想到个问题:为了不让类创建对象,那么可以把它的构造函数私有化,而如果把这个类写成抽象类,里面没有抽象方法。那么这两者之前有什么异同?
作者: 午夜b'Boy    时间: 2014-1-3 18:53
构造函数私有化后,你为他添加一个子类,子类初始化是要调用父类的无参构造方法的,具体是怎样我也不懂
作者: 午夜b'Boy    时间: 2014-1-3 18:58
我发现构造方法私有后,貌似不能有子类了
作者: 快乐的黑马    时间: 2014-1-3 20:33
抽象后强迫子类拥有它的方法。
作者: 李兴    时间: 2014-1-3 21:50
把类的构造函数私有化,可以阻止类的外部使用new关键字创建类的实例
但是该类自己可以创建他的实例并通过一个函数返回,这就是单例设计模式的原理
如下代码可以获得

  1. public class DemoA {
  2.     public static void main(String[] args) {
  3.             DemoB p = DemoB.getInstance();
  4.     }   
  5. }

  6. class DemoB{
  7.         private DemoB(){}
  8.         private static DemoB p = new DemoB();
  9.        
  10.         public static DemoB getInstance(){
  11.                 return p;
  12.         }
  13. }
复制代码


如果把类写成抽象类,那么不管是类的外部,还是类本身都不能创建类的实例了
但是可以创建该类的匿名子类对象
代码如下

  1. public class DemoA {
  2.     public static void main(String[] args) {
  3.             DemoB p = DemoB.getInstance();
  4.     }   
  5. }

  6. abstract class DemoB{
  7.         private DemoB(){}  //该方法不可能被调用
  8.         private static DemoB p = new DemoB(){
  9.                 //自定义代码
  10.         };
  11.        
  12.         public static DemoB getInstance(){
  13.                 return p;
  14.         }
  15. }
复制代码

注意p为DemoB的匿名子类实例

这就是两者的区别




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2