Это указано в JLS как правило, которое требуется компиляторам :
Пакеты, которые хранятся в файловой системе, могут иметь определенные ограничения наорганизация их модулей компиляции, чтобы позволить простой реализации легко находить классы.
Например, если вы укажете все исходные имена файлов в командной строке для javac, у вас не будет , чтобы следовать этим правилам ... но он в значительной степени используется повсеместно , и я не мечтал бы нарушить это правило для чего-то кроме крошечных тестов.
Обратите внимание, что по умолчаниюjavac сгенерирует файл класса как одноранговый узел исходного файла, независимо от структуры пакета;если вы укажете -d
, он сгенерирует соответствующую выходную структуру, даже если она не соответствует исходной структуре.