The class file will only run if the main is in the class or the superclass of the filename.
Is this observation correct?
Yes - your observation is correct
And why is it done this way?
!!??? - You need to ask James Goslig.
You need to start somewhere. The class you give to
java must contain a main() method - either in or inherited. - This was the case in your first 3 cases. This is just like in OLD "C" programs, where the execution starts in the main(argv, argc) method.
This was NOT the case in your 4th example. Hence "NoSuchMethod" Error