A derived type can shadow the name of inherited type members by redeclaring it. Shadowing a name does not remove the inherited type members by that name; it merely makes all of the inherited type members (including overloads) unavailable in the derived class. The shadowing declaration may be any type of entity. Note that it is legal to shadow a name of type members that have been multiply inherited through interface inheritance, thus making the name available in the derived interface.
Because methods are allowed to shadow inherited methods, it is possible for a class to contain several overridable methods with the same signature. This does not present an ambiguity problem, since all but the most derived method are hidden. Shadowing requires the explicit Shadows
modifier, or else an error will be reported. It is not an error to specify the Shadows
modifier if there is no such type member name to shadow.
Shadows