如果我有子类,则子类会继承父类的所有方法,但是如何在父类中使用子类的函数呢?那是抽象吗?我该如何完成?

我的代码:

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.


它编译文件,但是我得到抽象异常。

最佳答案

c:= cParent.Create;
WriteLn(c.ChildFunction);


您在此处创建cParent类的实例。此类仅包含一个抽象的ChildFunction,可以被其他类覆盖。该函数未在cParent中实现,因此会出现抽象错误。

如果您改用cChild类(在其中实现了ChildFunction),则此代码有效:

c:= cChild.Create;
WriteLn(c.ChildFunction);


为了澄清起见,请想象一个名为GeometricObject的父类和一个虚拟抽象方法CalculateVolume。现在,您可以使用球体/盒子的公式来创建实现SphereObject的子类,例如BoxObjectCalculateVolume。但是创建GeometricObject的实例并调用CalculateVolume没有任何意义。

07-24 14:11