“构造函数不可见”错误

新手上路,请多包涵

我有两个班级:

首先,使用一个构造函数:

 public class First {

    First (ObjectA myObjectA) {
        //do stuff
    }
}

其次,有两个构造函数:

 public class Second {

    Second (ObjectB myObjectB) {
        //do something...
    }

    Second (ObjectC myObjectC) {
        //do something else...
    }
}

当我想实例化我的 First 类时,Eclipse 生成一个错误(“构造函数不可见”),我必须添加 public 到 --- First 的构造函数 --- :

 First first = new First(myObject); //Error : "The constructor is not visble"

但是当我实例化我的 Second 类时,我没有错误:

 Second second = new Second(myObjectC); //No error...

注意:我在另一个类中实例化了 First ,但在 Second 中实例化了 FirstFirstSecond 在同一个包中。

你能解释一下为什么吗?

原文由 BnJ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 664
2 个回答

您的构造函数没有访问修饰符使其成为 package private 。假设 First 和 Second 在同一个包中,您可以从 first 调用 Second 的构造函数。但是,另一个包中的另一个类不能访问任何构造函数。

原文由 J4v4 发布,翻译遵循 CC BY-SA 3.0 许可协议

您的课程必须在 2 个包中。如果您不提及任何显式访问修饰符,Java 会将它们视为默认访问修饰符。那么你 只能通过同一个包访问它们

访问修饰符(从最少访问到最高访问)

  1. private - 仅在同一类中
  2. 默认- 仅在同一个包内
  3. protected - 同一个包 + 其他包中的子类
  4. 公共- 来自任何地方

原文由 Thusitha Thilina Dayaratne 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题