To add to what Mohamed Sanaulla explained,
these are the things to remember-
Runtime polymorphism applies only to methods. Or in other words 'Dynamic method dispatch' is supported. (Finding the type of object at runtime and invoking the corresponding method)
In the case of variables, its always the 'reference type'. There's no such thing as 'Runtime Variable Dispatch'.. Everything is resolved at compile-time when it comes to variables
Now to shadowing:
What happens, if you have a variable by the same name in the superclass and the subclass and what if they were initialized with different values ?
Well, its all about the reference type with which the variable is accessed. If accessed with a reference of the superclass, you get the value you initialized with in the superclass
If accessed with a reference of the subclass, you get the value you intialized with in the subclass. The actual type of the object doesn't matter (Whichever subclass object be assigned to the reference). Only the reference type matters.
As to the word 'shadow'ing
To say that gearRatio is shadowed in SportsCar, it means that the superclass's value is bypassed and the new value defined in the SportsCar is used. The word 'overriding' is avoided here as 'overriding' is a term that is tightly used along with 'runtime polymorphism'. And that isn't the case here
-Vishwa