如果我有子类,子类继承父类的所有方法,但是如何使用父类中子类的函数?抽象是什么?我该如何完成它?
我的代码:
type
cParent = class(TObject)
private
function ParentFunction:byte;
function ChildFunction:byte;virtual;abstract;
end;
type
cChild = class(cParent)
private function ChildFunction:byte;override;
end;
function cChild.ChildFunction:byte;
begin
Exit(20);
end;
function cParent.ParentFunction:byte;
begin
Exit(10);
end;
var
c:cParent;
begin
c:= cParent.Create;
WriteLn(c.ChildFunction);
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
它编译文件,但我得到抽象异常.
c:= cParent.Create;
WriteLn(c.ChildFunction);
Run Code Online (Sandbox Code Playgroud)
您可以在此处创建cParent类的实例.此类仅包含可由其他类重写的抽象ChildFunction.该函数未在cParent中实现,因此您会收到抽象错误.
如果你使用cChild类,代码可以工作,其中实现了ChildFunction:
c:= cChild.Create;
WriteLn(c.ChildFunction);
Run Code Online (Sandbox Code Playgroud)
为了澄清,想象一下GeometricObject使用虚拟抽象方法命名的父类CalculateVolume.您现在可以使用球体/框的公式创建类似SphereObject或BoxObject实现CalculateVolume的子类.但是创建一个GeometricObject和调用的实例是没有意义的CalculateVolume.