Вот простой пример переопределения типа. Рассмотрим понятие устройства, включив предположение о том, что для любого устройства есть альтернатива, так что устройство можно заменить, если оно по каким-либо причинам недоступно:
class DEVICE feature alternate: DEVICE set_alternate (a: DEVICE) is -- Пусть a - альтернативное устройство. do alternate := a end ... Прочие компоненты ... end
Принтер является устройством, так что использование наследования оправдано. Но альтернативой принтера может быть только принтер, но не дисковод для компакт-дисков или сетевая карта, - поэтому мы должны переопределить тип:
class PRINTER inherit DEVICE redefine alternate, set_alternate feature alternate: PRINTER set_alternate (a: PRINTER) is -- Пусть a - альтернативное устройство. ... Тело как у класса DEVICE ... ... Прочие компоненты ... end
В этом и проявляется специализирующая природа наследования.