在Java中访问没有顶级类的非顶级类

时间:2008-11-28 05:47:46

标签: java compiler-construction jvm classloader

我有一个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 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:1)

同一个包中的任何其他类都可以访问A和B;在这种情况下,正在使用null包,因为源文件没有包语句。