Почему я не могу использовать закрытый (неявный) класс пакета в качестве класса верхнего уровня 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, но если вы объявите класс закрытым или защищенным, то его единственная цель будет потеряна, если объявить закрытый класс, что не позволит этому классу быть видимым никому. другой класс и маркировка, которой он защищен, тоже будут делать то же самое. Всегда рекомендуется делать класс по умолчанию или общедоступным.

Другие вопросы по тегам