Я изо всех сил пытаюсь понять взаимодействие множественного наследования с репликацией и полиморфизмом. Пожалуйста, рассмотрите следующие классы, образующие классический образец алмаза.Репликация из множественного наследования в Eiffel
deferred class A
feature
a deferred end
end
deferred class B
inherit A
rename a as b end
end
deferred class C
inherit A
rename a as c end
end
class D
inherit
B
C
select c end
feature
b do print("b") end
c do print("c") end
end
Если я прикрепить экземпляр D к объекту ob_as_c
типа С, затем ob_as_c.c
печатает «C», как и ожидалось. Однако, если прикрепить экземпляр к объекту ob_as_b
типа B, то ob_as_b.b
напечатает также печать «c».
Это намеренное поведение? Очевидно, я хотел бы ob_as_b.b
напечатать «b».
Благодарим за объяснение. К сожалению, это делает характеристики наследования Эйфеля гораздо менее полезными для меня. – beckni
Что касается спецификации ECMA: не указано 8.16.11, «Определение: версия динамической привязки», укажите, что в моем примере 'ob_as_b.b' должен печатать« b », поскольку существует только конформный путь от D до B и функция b of D является унаследованной функцией b из B? Предложение select должно быть релевантным только при наличии двух или более путей соответствия. – beckni