"The constructor is not visible"错误



我有两个类:

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

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,但在First中实例化了Second。CCD_ 8和CCD_。

你能解释一下为什么吗?

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

您的类必须在两个包中。如果您没有提到任何显式访问修饰符,Java将把它们视为默认访问修饰符。然后只能通过同一个包访问它们

访问修改器(从最少访问到最高访问)

  1. 私有-仅在同一类中
  2. 默认-仅在同一软件包内
  3. protected-相同的包+其他包中的子类
  4. 公共-从任何地方

由于您没有提到任何修饰符,访问修饰符现在是默认,这意味着它只能在自己的包中可见

如果你试图在包外使用它,你将面临当前的错误。

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

如果你不明白@BackSlash在评论什么,请查看下面的链接

问题:从超类调用方法

只需将构造函数公开

最新更新