黑马程序员技术交流社区

标题: 为什么说类的构造函数被私有化以后就不可以创建对象了? [打印本页]

作者: 韩长征    时间: 2014-4-17 15:32
标题: 为什么说类的构造函数被私有化以后就不可以创建对象了?
本帖最后由 韩长征 于 2014-4-18 14:21 编辑

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



作者: kuroro自走核炮    时间: 2014-4-17 15:34
本帖最后由 kuroro自走核炮 于 2014-4-17 15:38 编辑

private 私有化是把使用范围限定在本类中了。构造函数被私有化,那么其他的类就无法使用这个构造函数,那么当然无法创建相应对象了。
单例设计模式目标是保证一个类在内存中对象的唯一性。所以要保证自己的类中创建了对象之后,其他的类不能再创建对象,只能获取这个对象。所以只要将本类中的构造函数私有化,其他程序就无法再创建该类对象。

作者: 左拉    时间: 2014-4-17 15:41
构造方法私有化的意思不是不允许new对象,而是禁止在外部类直接new出本类对象。
在单例设计中,Singleton类在定义的时候将构造方法私有化,而在内部仅仅new出一个对象,是为了禁止别的类在外面直接new Singleton()出来,这样你只要在Singleton类中new一个对象,就能确保无论什么情况都只会产生一个Singleton对象,外部无法new出来,内部已经定义好了,有且仅有一个对象,这就是单列设计的核心。
当然你可以在Singleton对象中new两个或者更多的对象留着备用,那就变成多例设计模式了。
无论单例还是多例,都是围绕构造方法私有化开展的,也就是说,定义类的时候自己确定好到底需要多少个对象,然后将构造方法私有化,外部无法随意地new出本类的实例化对象,只能通过调用才可以。
作者: 心?=忐§忑]    时间: 2014-4-17 15:50
私有化就相当于封装了,那么就意味着在外部根本就无法调用被封装的构造方法,既然外部不能调用,那么怎么操作司令部呢,怎么例化呢?
作者: igi9009    时间: 2014-4-17 15:58
每个对象在创建的时候都会运行构造函数,你把构造函数私有话了,别的类就无法调用该类的构造函数,该对象就无法建立,会报错。
作者: 韩长征    时间: 2014-4-17 16:10
谢谢大家,可不可以这样理解,就是创建对象,需要构造函数对其进行初始化。将构造函数私有化后,其他类创建该对象时,由于不能访问被私有化的构造函数,就不能对对象进行初始化,也就不能创建对象了。
而在本类中,可以使用被私有的成员,所以可以对创建对象进行初始化,也就可以创建对象。
作者: 韩长征    时间: 2014-4-17 16:43
可以理解成,创建对象就是调用构造函数了。这样就好懂了。
作者: 阿秋    时间: 2015-7-14 21:19
学习哈:loveliness:
作者: 15210373205    时间: 2015-9-14 22:55
韩长征 发表于 2014-4-17 16:43
可以理解成,创建对象就是调用构造函数了。这样就好懂了。

创建类对象是一定会调用构造函数的




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