java - 在包外创建非公共(public)类的对象

标签 java package

在一个目录中,我定义了以下文件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/

相关文章:

r - 更改包内 geom_text 的字体系列

Delphi 库路径 - 那里到底应该包含什么?

java - 如何从具有 int 和 string 的 Job 类生成随机对象

Java接口(interface)目录结构?

java - JAX-RS - 在 RESTful Web 服务中进行身份验证并获取用户数据

r - 这些包需要从(在 NAMESPACE 文件中)导入

compiler-errors - 德尔福 XE 2010 : Access Violation - How to remove package or component?

java - 打开 Intent 导致应用程序 Android Studio 崩溃

java - 如何在 Windows 中安装 Maven?

r - NAMESPACE 中的 ImportFrom 函数在 document() 上被删除