2014-11-23 144 views
0

我一直在读the article有关构造函数,什么已经写有:预防对象类创建

公共类同样可以防止实例的创建外 其包通过声明至少一个构造函数,以防止创建具有公共访问权的默认构造函数 ,并声明不存在公共的 构造函数。

我很困惑声明没有构造函数是公开。这是因为如果我们完全不声明任何构造函数,那么隐式声明的默认构造函数将会隐式地声明为具有该类的访问修饰符。这意味着如果该类声明为public,则默认构造函数也将公开。这就是我们可以在包外部使用它(在包外创建实例)。通过宣布至少有一个构造

这是什么原因造成的默认构造函数被创建

+0

的一句“声明没有构造函数是公众”是指“未宣布任何公共构造函数“。本来可以在JLS中更清楚地表达出来。 – Jesper 2014-11-23 07:56:47

回答

3

你错过了这一点。

给出的例子有一个缺省访问(包访问)构造:

PackageOnly() { } 

...所以它满足两个条件:a)其声明的至少一个构造函数; b)它没有声明任何公共构造函数。

2

没有,这个类可以BA公开,但构造函数可以protected仅供套件存取权限或者它也可以是private - 大多是工厂静态方法使用