【问题标题】:Double Inheritance and Abstract method双重继承和抽象方法
【发布时间】:2012-08-06 21:24:36
【问题描述】:

我有一个被继承两次的基地。第二个子类没有为方法克隆提供任何签名,但第三个子类提供并定义方法克隆如下。

  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 继承的,因此应该自动为基类 clone 方法覆盖方法 clone。我说的对吗?

提前致谢,

【问题讨论】:

  • 代码中的 TMakerObject 应该是 TControlObject 吗?如果没有,为什么要为 TMakerObject 提供类签名?
  • 是的,犯了一个错误。这就是当您开始一直复制和粘贴时会发生的情况 LOL

标签: .net inheritance abstract-class base-class delphi-prism


【解决方案1】:

TControlObject 中的 Clone 方法具有 abstract 属性。这意味着任何直接派生自TControlObject 的类都必须提供Clone 方法的实现(请参阅MSDN abstract)。因此,TGateControl 必须提供克隆的实现。如果TControlObject 有克隆的具体实现,那么,是的,它不需要被覆盖。

所以有些选项是:

  1. 要么删除克隆上的abstract 属性。
  2. TControlObjectTGateControl 中添加Clone 的实现。

澄清一下,这些方法永远不会“自动覆盖”。派生类能够调用基类的实现,但说派生类“自动覆盖”了基类的实现是不正确的。

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 2019-04-28
    • 2016-11-05
    • 2011-03-10
    • 1970-01-01
    • 2010-09-29
    • 2013-07-01
    • 2014-07-09
    相关资源
    最近更新 更多