Почему я не могу использовать закрытый (неявный) класс пакета в качестве класса верхнего уровня Java-файла?
Я новичок в Java. Может быть, вопрос немного наивный.
Например, у меня есть pkg1, в котором есть 2 файла Java: f1.java и f2.java
В качестве заголовка я считаю разумным использовать класс package-private-top-level для f1, затем использовать класс public-top-level для f2, тогда внешняя сторона pkg1 все еще может обращаться к f1 через f2.
У меня даже могут быть f3, f4... ..., которые все используют класс package-private в качестве класса верхнего уровня. Тогда f2.java станет файлом интерфейса пакета для остальных файлов в pkg1.
Итак, почему тот факт, что класс верхнего уровня должен быть публичным? Просто чтобы предотвратить ненужные сложности?
3 ответа
Согласно Oracle Java Tutorial, public - не единственный возможный модификатор класса верхнего уровня:
Класс может быть объявлен с модификатором public, и в этом случае этот класс виден всем классам везде. Если класс не имеет модификатора (по умолчанию, также известного как package-private), он виден только внутри своего собственного пакета
Так что, в принципе, нет никаких проблем в том, чтобы сделать некоторые классы защищенными или закрытыми для пакетов, если ваш дизайн запрашивает это.
Термин "класс верхнего уровня" фактически существует в Java, а также термины "внутренний класс" и "вложенный класс". Я предлагаю вам взглянуть на эту страницу, чтобы прояснить некоторые основы иерархии классов Java.
почему тот факт, что класс верхнего уровня должен быть публичным?
Класс "верхнего уровня" в Java - это просто класс, который не является вложенным (класс внутри другого класса - JLS§8). Они не обязаны быть public
,
Вы можете думать о приложениях, которые запускаются через java
инструмент (не все такие!). Класс предназначен для использования в качестве точки входа для java
инструмент обычно отображается как public
в примерах, но это не обязательно. Требуется публичная статическая пустота main
метод принятия String
массив, но сам класс не должен быть public
,
Класс верхнего уровня должен быть публичным, потому что публичный класс может использоваться в любом месте в юниверсе java, но если вы объявите класс закрытым или защищенным, то его единственная цель будет потеряна, если объявить закрытый класс, что не позволит этому классу быть видимым никому. другой класс и маркировка, которой он защищен, тоже будут делать то же самое. Всегда рекомендуется делать класс по умолчанию или общедоступным.