Objects of the subclass have all the methods of the superclass, although the hidden methods aren't visible within the subclass. All superclass methods not mentioned in a renaming clause retain their original names. The effect of the renamings is that the superclass appears to have been rewritten with the names needed in the subclass. Subclass methods can also be implemented explicitly. If such a method has the same name as a visible superclass method, the new implementation overrides the associated superclass method.
Methods overridden by a subclass can affect the behavior of superclass methods.
Therefore, we require that the overriding definition have a signature that is a subtype of the signature of the method it overrides. A subclass type is not a subtype of the superclass type, nor is it a subtype of the type implemented by the superclass, unless the type implemented by the subclass is a subtype of the type implemented by the superclass. With one exception, ordinary type checking restrictions apply to subclass objects, e.g., a subclass object cannot be assigned to a variable whose type is the superclass type. The exception is that the code of a subclass and its module can call the methods and routines provided by its superclass passing in subclass objects as arguments in positions where an object of the superclass type, or of the type implemented by the superclass, is required. A subclass can use its hides clause to avoid exporting inherited methods to its subclasses and can use its provides clause to export methods, and also routines and makers implemented in its module.