"The method overriding is an example of runtime polymorphism. You can have a method in subclass overrides the method in its super classes with the same name and signature. Java virtual machine determines the proper method to call at the runtime, not at the compile time."
Why not at compile time? I can't understand why the compiler can't figure out which method is suppose to be called. It's not like a new method will be invented at runtime or anything. All the instructions of the program are available for the compiler (obviously), so what's the deal???