У меня есть файл 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 даже позволяет компилировать такие файлы без класса верхнего уровня?
Любой другой класс в том же пакете может получить доступ к A и B; в этом случае используется нулевой пакет, поскольку для исходного файла отсутствует оператор пакета.
Как обычно (например, доступ из Test.java):
public class Test {
public static void main(String... args) {
A a = new A();
a.foo();
B b = new B();
b.bar();
}
}
Правило здесь состоит в том, что у вас не может быть более одного общедоступного класса в исходном файле. Если он у вас есть, имя файла должно соответствовать имени этого общедоступного класса. В противном случае (в вашем случае) вы можете назвать свой файл по своему усмотрению. Другие, закрытые классы будут видимы для пакетов, и вы сможете получить к ним доступ как обычно.