Доступ к классу не верхнего уровня без класса верхнего уровня в Java - PullRequest
0 голосов
/ 28 ноября 2008

У меня есть файл Java TestThis.java, например:

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

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

Приведенный выше файл кода прекрасно компилируется без каких-либо предупреждений / ошибок. Могу ли я получить доступ к любому классу A или B без класса верхнего уровня из любого другого внешнего класса?

Если нет, то почему Java даже позволяет компилировать такие файлы без класса верхнего уровня?

Ответы [ 2 ]

5 голосов
/ 28 ноября 2008

Как обычно (например, доступ из Test.java):

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

Правило здесь состоит в том, что в исходном файле не может быть более одного открытого класса. Если он у вас есть, имя файла должно совпадать с именем этого открытого класса. В противном случае (ваш случай), вы можете назвать свой файл по своему желанию. Другие непубличные классы будут видны для пакетов, и вы сможете обращаться к ним как обычно.

1 голос
/ 28 ноября 2008

Любой другой класс в том же пакете может получить доступ к A и B; в этом случае используется пустой пакет, так как для исходного файла нет инструкции пакета.

...