当我写一个类时,我知道我可以使用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;
答案 0 :(得分:8)
TObject
这将调用{{1}}中的无参数构造函数,而不调用直接祖先中声明的构造函数。应该清楚这一点,因为没有提供参数。
有关详细信息,请参阅文档:http://docwiki.embarcadero.com/RADStudio/en/Methods_(Delphi)#Inherited
作为强大的指导原则,您不应错过从父类调用继承的构造函数。通常这意味着您无法实例化父类使用的对象。我认为问题中的代码非常可疑。