You're close...
1) The overriding method is the one that will be selected at runtime. In other words, the lowest one in the class hierarchy, as you described.
2) Your understanding of how it works with static methods is correct, but not your terminology. We do not say that they are actually *overridden*. You *can* redefine a static method in a subclass, when that method also exists in the superclass, but
polymorphism does not apply, so the method is selected based on the reference type.
3) Same with instance variables, as you pointed out. If you redefine (shadow) a variable in a subclass, when that variable also exists in the superclass, both values are present as part of the subclass object, but which value is used depends on the reference type, not the actual object type.
4) With overloaded methods, there's no real issue, you can call a method based only on whether that method exists in the class of the *reference* type, so if a subclass overloads a method from the superclass, you can't get to that new overloaded method using a reference to the superclass.
hope that helps,
Kathy