Читайте также:
|
|
Переопределение (overriding) методов в Object Pascal реализует концепцию полиморфизма, позволяя изменять поведение метода от наследника к наследнику.
Переопределение метода возможно только в том случае, если первоначально он был объявлен как virtual или dynamic.
Для переопределения метода при его объявлении вместо ключевых слов virtual или dynamic следует указать ключевое слово override.
Ниже приведен пример переопределения методов, где метод Draw переопределен в двух унаследованных классах TRectangle и TEllipse.
Type
TFigure = class
procedure Draw; virtual;
end;
TRectangle = class(TFigure)
procedure Draw; override;
end;
TEllipse = class(TFigure)
procedure Draw; override;
end;
Здесь первым, объявлен класс TFigure, который затем наследуют классы TRectangle и TEllipse, что видно из объявлений классов, где за ключевым словом class в круглых скобках помещается имя родительского класса.
Директива override приводит к замещению строки описания исходного метода в VMT строкой описания нового метода. Если объявить новые функции с ключевым словом virtual или dynamic, а не override, то вместо замещения старых будут созданы новые методы.
В случае переопределения статического метода новый вариант просто полностью заменит статический метод родителя.
Если использовать следующий исполнимый код:
var
Figure: TFigure;
begin
Figure:= TRectangle.Create;
Figure.Draw; // вызывает TRectangle.Draw
Figure.Destroy;
Figure:= TEllipse.Create;
Figure.Draw; // вызывает TEllipse.Draw
Figure.Destroy;
end;
то, в зависимости от того, какая фигура создается, прямоугольник (TRectangle) или эллипс (TEllipse), вызываются разные методы для их прорисовки, хотя способ вызова один и тот же: Figure.Draw;.
Дата добавления: 2015-07-25; просмотров: 70 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Типы методов | | | Перегрузка методов |