双重继承和抽象方法
问题描述:
我有一个继承两次的基础。第二个子类没有为方法克隆提供任何签名,但是第三个子类按如下方式执行并定义方法克隆。双重继承和抽象方法
TControlObject = abstract class
...
public
method Clone:TControlObject; virtual; abstract;
end;
TGateControl = class(TControlObject)
...
public
...
end;
TAndControl = class(TGateControl)
public
method Clone:TControlObject; override;
end;
但是,编译器产生了一个错误,即TGateControl类不提供克隆方法的实现。由于TGateControl从TControlObject继承,并且TAndControl类从TGateControl继承,因此应该自动为基类克隆方法重写方法克隆。我对吗?
由于提前,
答
你必须在TControlObject
克隆方法abstract
属性。这意味着直接从TControlObject
派生的任何类都必须提供Clone方法的实现(请参阅MSDN abstract)。结果TGateControl必须提供克隆的实现。如果TControlObject
具有克隆的具体实现,那么,是的,它不需要被覆盖。
所以有些选项是:
- 要么取消对克隆
abstract
属性。 - 在
TControlObject
或TGateControl
中添加Clone
的实现。
并且为了澄清,这些方法从未被“自动覆盖”。派生类可以调用基类的实现,但是说派生类具有“自动重写”基类的实现是不正确的。
+0
+1时发生的情况。你的回答比我的要清楚得多。删除了我的。 – 2012-08-09 16:09:11
你的代码中的TMakerObject应该是TControlObject吗?如果不是,为什么您要为TMakerObject提供类签名? – 2012-08-09 15:54:39
是的,犯了一个错误。这是当你开始复制和粘贴LOL – ThN 2012-08-09 16:01:31