It's not so that there must always be exactly one public class in a file. You can also have no public class at all in a file. But you can indeed not have more than one public class in a file.
There's not a real strict reason for this; the reason this is so is historical. I remember reading something about the programming language Oak, which was a predecessor to Java; James Gosling explained that for Oak, this was a rule they had because it made the compiler more efficient in some way. The rule was also put into Java, although the argument about making the compiler more efficient might no longer be really true.
This is something you're certainly not going to get questions about on the
SCJP exam.