默认情况下Java构造函数不是公开的吗? [复制]

Posted

技术标签:

【中文标题】默认情况下Java构造函数不是公开的吗? [复制]【英文标题】:Aren't Java constructors public by default? [duplicate] 【发布时间】:2011-06-07 19:45:10 【问题描述】:

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

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

【问题讨论】:

类构造函数默认是包私有的。枚举构造函数默认是私有的。 唯一默认公开的构造函数是隐式的、无参数的构造函数。也就是说,如果您没有定义任何内容。 【参考方案1】:

没有访问说明符!= public

没有修饰符是包私有的。检查doc

【讨论】:

答案是好的,但链接的文档没有提到默认的 c'tors。 @Bob 你看到没有修饰符吗? 但是在接口中所有方法都是公共抽象的,即使你是否公开【参考方案2】:

不,他们不是。默认情况下,它们具有包可见性。

【讨论】:

【参考方案3】:

当你不写访问修饰符时,它被设置为默认值,这意味着包私有。例如。包外的任何类都不能访问它。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

您可以在构造函数的声明中使用访问修饰符来控制哪些其他类可以调用构造函数。 如果您没有将构造函数显式声明为公共,则它仅在声明它的同一包中可见(包访问)

【讨论】:

【参考方案6】:

默认访问是(错误...)默认访问。也称为包私有。考虑一下:如果默认情况下它们是public,你如何表明构造函数不是public,但实际上是包私有的?没有与 package private 对应的关键字来表明这一点。

【讨论】:

【参考方案7】:

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

【讨论】:

以上是关于默认情况下Java构造函数不是公开的吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?

创建重载构造函数时,是不是需要默认构造函数? [复制]

Java中的构造函数可以是私有的吗?

如何在不复制对象的情况下向 Python 公开返回 C++ 对象的函数?

如果类具有参数化构造函数,为啥Java不提供默认构造函数? [复制]

关于复制构造函数的几个问题