A type may override an inherited overridable method by supplying a method with the same name and signature and marking the declaration with the Overrides keyword. Whereas a method declared with Overridable introduces a new method, a method declared with Overrides replaces the inherited implementation of a method. Normally an overriding method is itself overridable; however it it possible to declare an overriding method as NotOverridable, which prevents any further overriding of the method in derived classes.
A compile time error occurs unless all of the following are true for an overriding method:
In an overridable method invocation, the runtime type of the instance for which the invocation takes place determines the actual method implementation to invoke. At runtime the most derived implementation of the instance method is called, based on the type of the instance.