A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

突然想到个问题:为了不让类创建对象,那么可以把它的构造函数私有化,而如果把这个类写成抽象类,里面没有抽象方法。那么这两者之前有什么异同?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

4 个回复

正序浏览
把类的构造函数私有化,可以阻止类的外部使用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的匿名子类实例

这就是两者的区别
回复 使用道具 举报
抽象后强迫子类拥有它的方法。
回复 使用道具 举报
我发现构造方法私有后,貌似不能有子类了
回复 使用道具 举报
构造函数私有化后,你为他添加一个子类,子类初始化是要调用父类的无参构造方法的,具体是怎样我也不懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马