有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中访问无顶级类的非顶级类的编译器构造

我有一个Java文件TestThis.java,如下所示:

class A
{
    public void foo() 
    {
        System.out.println("Executing foo");
    }
}

class B
{
    public void bar()
    {
        System.out.println("Executing bar");
    }
}

以上代码文件编译正常,没有任何警告/错误。是否有任何方法可以访问任何类AB,而无需任何其他外部类的顶级类

如果没有,那么为什么Java甚至允许在没有顶级类的情况下编译这样的文件呢


共 (2) 个答案

  1. # 1 楼答案

    与往常一样(例如,从Test.java访问):

    public class Test {
        public static void main(String... args) {
            A a = new A();
            a.foo();
            B b = new B();
            b.bar();
        }
    }
    

    这里的规则是,源文件中不能有多个公共类。如果有,文件名必须与这个公共类名匹配。否则(您的案例),您可以根据需要命名文件。其他非公共类将是包可见的,您可以像往常一样访问它们

  2. # 2 楼答案

    同一包中的任何其他类都可以访问A和B;在这种情况下,由于源文件不存在package语句,所以使用空包