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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 韩长征 于 2014-4-18 14:21 编辑

如题,为了防止其他程序创建一个类的对象,通过将该类的构造函数进行私有化来完成。也就是说,将一个类的构造函数进行 私有化以后,其他类就不能创建这个类的对象了。
请问这是为什么?是不是因为构造函数私有化以后无法接收传人的参数了吗?
在单例模式中,同样对类的构造函数进行私有化,但在类中可以建立本类对象。这又是为什么?


评分

参与人数 1黑马币 +1 收起 理由
honest~成 + 1 很给力!

查看全部评分

9 个回复

倒序浏览
本帖最后由 kuroro自走核炮 于 2014-4-17 15:38 编辑

private 私有化是把使用范围限定在本类中了。构造函数被私有化,那么其他的类就无法使用这个构造函数,那么当然无法创建相应对象了。
单例设计模式目标是保证一个类在内存中对象的唯一性。所以要保证自己的类中创建了对象之后,其他的类不能再创建对象,只能获取这个对象。所以只要将本类中的构造函数私有化,其他程序就无法再创建该类对象。
回复 使用道具 举报
构造方法私有化的意思不是不允许new对象,而是禁止在外部类直接new出本类对象。
在单例设计中,Singleton类在定义的时候将构造方法私有化,而在内部仅仅new出一个对象,是为了禁止别的类在外面直接new Singleton()出来,这样你只要在Singleton类中new一个对象,就能确保无论什么情况都只会产生一个Singleton对象,外部无法new出来,内部已经定义好了,有且仅有一个对象,这就是单列设计的核心。
当然你可以在Singleton对象中new两个或者更多的对象留着备用,那就变成多例设计模式了。
无论单例还是多例,都是围绕构造方法私有化开展的,也就是说,定义类的时候自己确定好到底需要多少个对象,然后将构造方法私有化,外部无法随意地new出本类的实例化对象,只能通过调用才可以。

点评

有助于理解!  发表于 2018-5-5 15:54

评分

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

查看全部评分

回复 使用道具 举报 2 0
私有化就相当于封装了,那么就意味着在外部根本就无法调用被封装的构造方法,既然外部不能调用,那么怎么操作司令部呢,怎么例化呢?
回复 使用道具 举报
每个对象在创建的时候都会运行构造函数,你把构造函数私有话了,别的类就无法调用该类的构造函数,该对象就无法建立,会报错。
回复 使用道具 举报
谢谢大家,可不可以这样理解,就是创建对象,需要构造函数对其进行初始化。将构造函数私有化后,其他类创建该对象时,由于不能访问被私有化的构造函数,就不能对对象进行初始化,也就不能创建对象了。
而在本类中,可以使用被私有的成员,所以可以对创建对象进行初始化,也就可以创建对象。
回复 使用道具 举报
可以理解成,创建对象就是调用构造函数了。这样就好懂了。
回复 使用道具 举报
阿秋 中级黑马 2015-7-14 21:19:14
8#
学习哈:loveliness:
回复 使用道具 举报
韩长征 发表于 2014-4-17 16:43
可以理解成,创建对象就是调用构造函数了。这样就好懂了。

创建类对象是一定会调用构造函数的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马