在一个目录中,我定义了以下文件A.java:
package test;
public class A {}
class B {
public void hello() {
System.out.println("Hello World");
}
}
从不同的目录,如果我执行以下操作:
import test.B;
public class X {
public static void main(String [] args) {
B b = new B();
b.hello();
}
}
并编译javac X.java
,我收到以下错误:
X.java:2: test.B is not public in test; cannot be accessed from outside package
import test.B;
^
X.java:7: test.B is not public in test; cannot be accessed from outside package
B b = new B();
^
X.java:7: test.B is not public in test; cannot be accessed from outside package
B b = new B();
^
我无法更改包测试中的源。我该如何解决这个问题?
最佳答案
在Java中,有4 different scope accessibilities :
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
在您的情况下,B
没有修饰符,这意味着它只能在类内和包内看到。因此,如果您创建属于其他包的 X
类,它将看不到 B
。
要访问 B
,您需要定义一个与 B
位于同一包内的类,在您的情况下是包 test
。
关于java - 在包外创建非公共(public)类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26279833/