Sua pergunta não é mais uma questão técnica. Vamos discutir um pouco de OO.
Dentroa da POO (Programação Orientada a Objetos) temos os seguintes pilares que DEFINEM um sistema/componente/whatever como ORIENTADO A OBJETOS: reutilização, encapsulamento, herança, polimorfismo e abstração.
Reutilização significa que você pode pegar um componente do seu sistema e reutilizá-lo em qualquer outro sistema. É uma peça independente com uma funcionalidade definida através de seus MÉTODOS, que são os pontos de entradas, os fornecedores de serviço, do seu objeto. Reutilizar é pegar um arquivo COMPILADO (.jar, .class, .ear) e conseguir usar as suas funções.
Uma classe pública é uma classe que fornece alguma funcionalidade que pode ser utilizada por qualquer outro componente. As classes ficam armazenado em 1 arquivo .class no java, que pode ter mais de 1 classe nele.
Vamos imaginar que você tenha um mesmo componente (.class) que tenha duas classes públicas, ou seja, duas classes que tem uma funcionalidade bem definida e fornecem serviços para outras classes. Digamos agora que uma dessas classes você pode usar em outro sistema ou até mesmo precise ser substituído. Se no seu .class você tem duas classes INDEPENDENTES, que cada uma presta seus serviços, você terá de indisponibilizar uma das classe para substituir a outra, ou então levar uma classe inútil junto com outra que tem utilidade. Isso acaba com o princípio de reusabilidade do seu componente orientado a objeto.
Java é fortemente calcada na orientação a objetos. Por isso que na menor unidade que contém código do Java (o .class) você só pode ter uma classe que é a disponiblizadora de serviços. Se você tiver outras classes dentro dessa unidade, elas só tem razão de estarem lá se forem úteis apenas dentro daquele contexto, da mesma forma que disponibilizar uma classe que não pode ser reusável por depender diretamente de outras também é um erro, a não ser que ela esteja sendo disponibilizada dentro de um pacote, e seu acesso seja restrito à ele.
Um bom livro de referência sobre Orientação à Objeto é o “Engenharia de Software”, do Pressman. Lá você você entender todos os princípios da Orientação a Objetos e daí vai entender porque muita coisa no Java é do jeito que é.
Best Regards…