从子覆盖中调用父虚拟函数

时间:2014-11-28 15:03:52

标签: delphi

我在父级和子级中定义了虚函数Hello()。如何从子Hello()?

调用父Hello()
TParent = class (TComponent)
public
  procedure Hello(); virtual;
end;

TChild = class (TParent)
public
  procedure Hello(); 
end;


procedure TChild.Hello;
begin
  //call parent Hello();
end;

1 个答案:

答案 0 :(得分:1)

您必须调用继承的方法。您还忘记添加覆盖属性:

program Project1;
type
  TParent = class
    procedure Hello(); virtual;
  end;

  TChild = class (TParent)
    procedure Hello();override;
    procedure Olleh;
  end;

  procedure TParent.Hello;
  begin
    writeln('pt');
  end;

  procedure TChild.Hello;
  begin
    inherited;
  end;

  procedure TChild.Olleh;
  begin
    inherited Hello;
  end;

var child: TChild;
begin
  child := TChild.Create;
  child.Olleh;
  child.Hello;
  readln;
end.

或者,你可以通过明确指定要调用的方法来调用父方法" Hello",就像在Olleh中一样。通常在一个重叠的方法inherited是裸的,但有时你必须显式调用一个方法(例如在多个构造函数或重载的情况下)。