In one of his Java Specialists' Newsletters, Heinz Kabutz digs through the Oak Language Specifications. He writes:
Why is each public class in a separate file? (Section 1)
This is a question that I have frequently been asked during my
courses. Up to now I have not had a good answer to this question. 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
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.