2011-01-12 68 views
15

我在两个不同的包中有两个类。对于一个类,我定义了一个构造函数,但没有为它设置访问修饰符。我想在另一个包中实例化这个类的对象,并得到错误'the constructor xxx() is not visible'。默认情况下,Java构造函数是不是公共的?

如果我将访问权限定义为public,那很好。我认为构造函数默认是公开的?

+0

默认情况下,类构造函数是包私有的。枚举构造函数默认是私有的。 – Boann 2016-10-18 00:48:45

回答

18

没有访问说明符!=公共

无修饰是包私有。检查doc

+0

答案没问题,但链接的文档没有提及默认的c'tors。 – 2013-10-29 12:43:22

13

不,他们不是。它们默认具有软件包可见性。

2

当您不写入访问修饰符时,它被设置为默认值,这意味着私有包。例如。包外没有课程可以访问它。

1

不,他们有默认的访问说明符。 即它们具有包可见性。

1

您可以在构造函数的声明中使用访问修饰符来控制哪些其他类可以调用构造函数。 如果您没有将构造函数明确声明为public,则只会在声明它的包(包访问)的相同包中可见。

7

默认访问是(err ...)默认访问。也被称为包私人。考虑一下:如果它们默认为public,那么你如何表示构造函数不是public,但实际上是包私有的?没有关键字与私有包相对应,用于表明这一点。

1

在一个类中,没有访问修饰符的所有方法都具有包可见性。但是,在接口方法中总是有公开的可见性。

相关问题