考虑假设的对象层次结构,从以下位置开始:
TFruit = class(TObject)
public
constructor Create(Color: TColor); virtual;
end;
及其后代:
TApple = class(TFruit)
public
constructor Create(); overload; virtual;
constructor Create(Color: TColor); overload; override; //deprecated. Calls other constructor - maintaining the virtual constructor chain
end;
这里的想法是,我已经重写基类的虚拟构造函数,并使用恰好也是虚拟的重载 .
德尔福提示:
Method 'Create' hides virtual method of base type 'TFruit'
只不过它没有隐藏它 - 它就在那里!
- 我覆盖了祖先中的虚拟方法,并且
- 我用另一个版本重载了它
这是怎么回事?
最佳答案
两种解决方案:
type
TFruit = class(TObject)
public
constructor Create(Color: TColor); virtual;
end;
TApple = class(TFruit)
public
constructor Create(); reintroduce; overload;
constructor Create(Color: TColor); overload; override;
end;
或者:
type
TFruit = class(TObject)
public
constructor Create; overload; virtual; abstract;
constructor Create(Color: TColor); overload; virtual;
end;
TApple = class(TFruit)
public
constructor Create(); override;
constructor Create(Color: TColor); override;
end;
关于Delphi:方法 'Create' 隐藏了基类的虚拟方法 - 但它就在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9103263/