Один класс с модификатором public в классе
Мы можем создать в одном файле несколько классов, но только один из них может быть с модификатором public, почему?
Ответы (1 шт):
Основная причина для такого ограничения, которое тянется ещё со времени разработки предшественника Java - языка Oak:
In section 1, we read: "Although each Oak compilation unit can contain multiple classes or interfaces, at most one class or interface per compilation unit can be public".
In the sidebar it explains why: "This restriction is not yet enforced by the compiler, although it's necessary for efficient package importation"
It's pretty obvious - like most things are once you know the design reasons - the compiler would have to make an additional pass through all the compilation units (.java files) to figure out what classes were where, and that would make the compilation even slower.
То есть, такой подход позволяет ускорить компиляцию, иначе компилятору понадобился бы дополнительный проход, чтобы определить, какой класс содержится в каком файле исходного кода.
Кроме того, строгая стандартизированная организация кодовой базы в проектах, содержащих сотни и тысячи файлов с классами, позволяет улучшить стиль и читаемость кода.
Однако следует заметить, что в одном .java файле может быть объявлено несколько классов с модификатором public в том же файле (с учётом вложенных и статических классов), но только один публичный класс может быть объявлен на верхнем уровне (top level class):
public class Top {
public class Inner {}
public static class NestedStatic {}
}