“构造函数不可见”错误

我有两节课:

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

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 in FirstFirstSecond在同一个包中。

你能解释一下为什么吗?

没有构造函数的访问修饰符使其包为私有 。 假设First和Second在同一个包中,你可以从第一个调用Second的构造函数。 但是,另一个包中的另一个类无法访问任何构造函数。

你的class级必须是两个包。 如果您没有提及任何显式访问修饰符,Java会将它们视为默认访问修饰符。 然后,您只能通过同一个包访问它们

访问修饰符(从最低访问权限到最高访问权限)

  1. 私人 – 仅限同一class级
  2. 默认 – 仅在同一个包中
  3. protected – 其他包中的相同包+子类
  4. 公众 – 从任何地方

由于您没有任何修饰符,因此访问修饰符现在是默认值 ,这意味着它仅在其自己的包中可见

如果您尝试在包装旁边使用它,您将面临当前错误。

试着阅读: Java中的默认访问修饰符是什么?

如果您没有理解@BackSlash评论的内容,请查看以下链接

问题: 从超类调用方法