This is how I try to understand it:
Since variables whether static or instance and static methods cannot be overridden, the compiler will not determine these members at runtime and the object denoted by the reference does not matter. They cannot be overridden so why would the compiler care about the object at runtime. So the compiler will just based the determination from the reference type.
Perhaps just remember this, always follow the reference type except on cases when a method is overridden, then follow the object type.
Hope that helps.
PS. Try making jume() static, then it is not overridden but hidden. See if the results will change.