Вызов переопределенной операции предка
Достаточно часто, реализация примитивной операции производного типа нуждается в вызове переопределенной примитивной операции предка.
Предположим, что для типов Root и Child_1
существуют описания операции Display имеющие следующий вид:
. . . procedure Display (Self: in Root); procedure Display (Self: in Child_1); . . . |
Поскольку такие операции совмещены, то можно сказать, что реализация операции Display
типа Root (предка для типа Child_1) является "затененной", в виду переопределения реализации в производном типе Child_1.
В таком случае, для вызова "затененной" операции предка можно использовать следующее:
procedure Display (Self: in Child_1) is
begin Display ( Root(Self) ); -- вызов "затененной" операции предка . . . end Display; |
Здесь, для вызова "затененной" реализации операции предка, используется явное преобразование представления параметра Self
к типу Root.
За счет этого, в подобных случаях, всегда осуществляется статическое связывание, а также отсутствует опасность получения бесконечного рекурсивного вызова.