logo
Языки программирования

Если свойство унаследовано от класса предка более чем одним путем, оно используется совместно; в противном случае свойства реплицируются.

rename- и redef ine-конструкции могут использоваться для изменения имен по мере необходимости. В примере класс Airplane наследует только одно по­ле Weight. Очевидно, по замыслу предлагалось для класса иметь два поля Weight, одно для корпуса летательного аппарата и одно для двигателя. Это­го можно достичь за счет переименования двух унаследованных объектов:

class Airplane inherit

Winged_Vehicle

rename Weight as Airframe_Weight;

Motorized_Vehicle

rename Weight as Engine_Weight;

end;

Предположим теперь, что мы хотим заместить подпрограмму display. Мы не можем использовать redefine, потому что при этом возникла бы неоднознач­ность указания подпрограммы, которую мы переопределяем. Решение состоит в том, чтобы использовать undefine для отмены определений обеих унасле­дованных подпрограмм и написать новую:

class Airplane inherit

Winged_Vehicle

undefine display end;

Motorized_Vehicle

undefine display end;

feature

display is... end;

end;

В справочном руководстве по языку Eiftel подробно обсуждается использова­ние rename, redefine и undefine для разрешения неоднозначности при множе­ственном наследовании.