“构造函数不可见”错误

时间:2014-08-27 14:52:12

标签: java constructor public

我有两个班级:

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

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位于同一个包中。

你能解释一下为什么吗?

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:2)

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

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

尝试阅读:What is the default access modifier in Java?

如果您确实了解@BackSlash评论的内容,请查看以下链接

问题:Calling a method from a superclass

答案 2 :(得分:2)

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

访问修饰符(至少访问最高访问权限)

  1. 私人 - 仅限于同一班级
  2. 默认 - 仅限于同一个套餐
  3. 受保护 - 其他包中的相同包+子类
  4. 公开 - 从任何地方