Лекция: Переопределение методов с сохранением функциональности

В приведенном примере метод 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.

еще рефераты
Еще работы по информатике