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

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

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

【问题讨论】:

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

标签: java constructor visibility


【解决方案1】:

没有访问说明符!= public

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

【讨论】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2021-05-14
              • 1970-01-01
              • 2016-06-17
              • 1970-01-01
              • 2020-11-22
              • 2017-07-28
              • 2016-03-25
              • 2014-03-24
              • 2014-03-12
              相关资源
              最近更新 更多