Delphi子类继承

时间:2017-01-23 18:28:06

标签: delphi

当我写一个类时,我知道我可以使用inherted关键字,所以我可以继承行为或TObject,例如:

type
 TOperation = class(TObject)
   constructor Create(dest, r1, r2: integer);
 end;

构造函数将有一个inherited Create;。看下面的课程:

type
 TAddition = class(TOperation)
   constructor Create(a1, a2: integer);
 end;

如果TAddition的第一行是inherited Create;,则意味着我当然继承了TOperation的行为。但这是否意味着我也继承了TObject的行为? (这是TOperation的超类)。

当我从父类的构造函数继承时(看看TAddition)我只继承了这种行为,不是吗?我没有从父类

初始化任何东西

完整的代码在这里:

 TOperation = class(TOBject)
  private
   dest, v1, v2: integer;
  public
   constructor Create(dest, r1, r2: integer);
   property destination: integer read dest;
   property value1: integer read v1;
   property value2: integer read v2;
 end;

 TMemoria = class(TOperation )
  private
   dest, r1: integer;
  public
   constructor Create(dest, r1: integer);
   property destination: integer read dest;
   property register1: integer read r1;
 end;

 constructor TOperation.Create(dest, r1, r2: integer);
 begin

  //inherit from TObject
  inherited Create;
  Self.r1 := r1;
  Self.r2 := r2; //so on...

 end;

constructor TMemoria.Create(dest, r1: integer);
 begin

  //inherit from TObject OR inherit from TOperation?
  inherited Create;

 end;

1 个答案:

答案 0 :(得分:8)

TObject

这将调用{{1}}中的无参数构造函数,而不调用直接祖先中声明的构造函数。应该清楚这一点,因为没有提供参数。

有关详细信息,请参阅文档:http://docwiki.embarcadero.com/RADStudio/en/Methods_(Delphi)#Inherited

作为强大的指导原则,您不应错过从父类调用继承的构造函数。通常这意味着您无法实例化父类使用的对象。我认为问题中的代码非常可疑。