Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
В приведенном примере метод GetResult класса TwoNums полностью переопределен в классе ThreeNums, то есть его изначальная функциональность полностью утеряна, но включена в функциональность замещающего метода с помощью копирования. Это практически всегда возможно, если разработчик класса имеет доступ к исходному тексту класса-родителя, но не всегда удобно, так как программный код, реализующий метод, может иметь немалые размеры.
Для сохранения функциональности переопределенного метода в Delphi имеется возможность его вызова из переопределяющего метода с помощью ключевого слова Inherited, используемого следующим образом:
Inherited <Название метода>(<список параметров>);
Аналогично могут вызываться и переопределенные методы, которые являются функциями:
...:= Inherited <Название метода>(<Список параметров>);
Изменим предыдущий пример таким образом, чтобы сумма свойств в методе GetResult вычислялась с использованием переопределенного варианта этого метода, описанного в классе TwoNums (листинг 3.11).
Листинг 3.11. Переопределение методов с сохранением функциональности
Unit Overriding2;
Interface
Type
TwoNums = class
public
a, b: Integer;
function GetResult: Integer; virtual;
End;
ThreeNums = class (TwoNums)
public
c: Integer;
function GetResult: Integer; override;
End;
Implementation
function TwoNums.GetResult: Integer;
Begin
Result:= a + b;
end;
function ThreeNums.GetResult: Integer;
Begin
Result:= Inherited GetResult + с;
{Результат функции — сумма значения, выдаваемого
переопределенным методом (сумма а и b), и свойства с}
end;
End.
Дата публикования: 2014-11-02; Прочитано: 349 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!