通过私有构造函数强化不可实例化的能力

本文探讨了Java中私有构造函数的作用及其对类实例化及继承的影响。解释了私有构造函数如何防止类被实例化,并指出它同样阻止了类被继承。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

通常的类在没有构造函数的情况下,编译器会自动提供一个公有的、无参数的默认构造函数,因此,在编写类时没有提供构造函数和构造函数私有是不同的。

提供一个私有的构造函数,如果该构造函数不会被类自身所调用,则该类将保证不会被实例化。但是,这么做会使得该类不能被子类化,例如:

class A

{

private A()

{

}

}

 

class B extends A

{

}

不管你是否使用了以上两个中任何一个类,编译该程序都将不会通过,提示:A()A中是private

 

为什么会这样?Java在处理构造函数的时候是这样的:首先编译器先检查是否提供显式的构造函数,如果没有则提供一个我们刚才提到的默认构造函数;其次,如果发现了显式的构造函数,则检查签名是否匹配,如果匹配则调用,如果不匹配则继续寻找,没有则报错。

很简单,Java在实例化一个类的时候,总是先从最超类开始调用构造函数,然后一步步的再调用子类的构造函数,直到调用到我们指定的那个子类。很显然,上面的代码如果在我们定义

B b=new B();

时,编译器会先调用Object的构造函数,然后是A的构造函数--哈!问题出来了,A的构造函数是private,当然就会报出上面的错误。

因此,提供私有化的构造函数是将该类不被实例化的一个很好的途径,但也是将该类不被子类化的最佳途径,而这个不被子类化不像我们定义final类一样,这个我们是被迫的。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值