Динамически перекрываемые методы могут вообще ничего не делать, тогда они называются абстрактными, но они обязаны перекрываться в потомках.
Реализация абстрактного метода не описывается. Вызов не перекрытого метода приводит к ошибке периода исполнения.
Классы, содержащие абстрактные методы называются абстрактными, они, как правило, инкапсулируют в себе общие свойства своих неабстрактных методов. Чтобы в потомках потом поменьше расписывать общие члены предков.
Type
TFigure = class
function Area:real;virtual; abstract;
end;
TCIrcle = class(TFigure)
r:real;
function Area (rad:real):real; override;
end;
TRectangle = class (TFigure)
x,y:real;
function Area (ax,ay:real):real; override;
end;
Var
CIrcle:TCIrcle;
Rectangle:TRectangle;
function TCIrcle.Area (rad:real):real;
begin
result:=3.1415*rad*rad;
end;
function TRectangle.Area (ax,ay:real):real;
begin result:=ax*ay; end;
Begin
CIrcle:=TCIrcle.create;
Rectangle:=TRectangle.create;
CIrcle.Area(3);
Rectangle.Area(2,3);
end.
ТИП «КЛАСС»
Type
TmetaClass = Class of TObject;
Var
MetaClass: TmetaClass;//может хранить в себе объект
любого класса потомка Tobject
Procedure UseObject(Obj: TmetaClass);
Begin
UseObject(TButton);
UseObject(TLabel);
end;
УКАЗАТЕЛЬ НА СЕБЯ
В каждом классе имеется не явно описанный идентификатор self, который всегда указывает на текущий объект. В метод всегда неявно передается указатель self на вызвавший его объект.