我在基类T声明一个函数A为VIRTUAL。
T.A;
begin
result:='1';
end;
S继承自T,也声明一个A。
S.A;
begin
result:='2';
end;
在程序中这样:variable:S;
variable.create//调用构造初始化
variable.A;//为什么返回的总是基类的结果1????????
是不是基类如果是virtual,子类方法一定要有override关键字??

解决方案 »

  1.   

    这是没有理由的,不用override就是完全覆盖了父类的同名方法,你哪里有错了!
    用下面代码测试
    type
      T = class
        procedure A; virtual;
      end;  S = class(T)
        procedure A;
      end;
    ...
    { T }procedure T.A;
    begin
      ShowMessage('ta');
    end;{ S }procedure S.A;
    begin
      ShowMessage('sa');
    end;
    ...
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ts: S;
    begin
      ts := S.Create;
      ts.A;
      ts.Free;
    end;