我有两个类:
首先,使用一个构造函数:
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将把它们视为默认访问修饰符。然后只能通过同一个包访问它们。
访问修改器(从最少访问到最高访问)
- 私有-仅在同一类中
- 默认-仅在同一软件包内
- protected-相同的包+其他包中的子类
- 公共-从任何地方
由于您没有提到任何修饰符,访问修饰符现在是默认,这意味着它只能在自己的包中可见
如果你试图在包外使用它,你将面临当前的错误。
试着读一读:Java中默认的访问修饰符是什么?
如果你不明白@BackSlash在评论什么,请查看下面的链接
问题:从超类调用方法
只需将构造函数公开