有关继承的模糊概念!(25分)

  • 主题发起人 主题发起人 xzs
  • 开始时间 开始时间
X

xzs

Unregistered / Unconfirmed
GUEST, unregistred user!
本人知道Pascal的OOP中类的继承关系,但Delphi中,除了有类的继承关系外,
还时常见到如下的语句:
begin
Inherited;
{*英文的含义是遗传,我认为就是类的继承*}
...........
end;
问题1、为何该句总在程序的首部?为什么?它的作用是什么?
问题2、Inherited的意义、作用请较详细地解释、说明一下!最好能举一实例
边分析边说明,排除我的模糊概念!
今年“粮食歉收”,“金库”就这点碎末末了,别见怪!
 
这是具体方法的继承.
目的是如果你继承了一个父类,并发展本子类自己独立的
特性,那么由于你的子类的很多行为是和父类相似的,所以
你只需要继承父类的方法,根据自己的需要增加新的特性,
那么你的子类就具有父类的特征和子类的特殊性了.
至于为什么一般都在第一行,这是因为继承父类行为如果
写在你子类的方法的特殊性动作之后,再去继承执行父类
的该方法,有可能会覆盖掉你的子类的动作特殊性.
例如:我要让一个TEDIT的Caption属性在创建时自动为空
我可以这样写:
TMyEdit = class(TCustomEdit) //继承于TCustomEdit
private
......
protected
......
public
constructor Create(AOwner: TComponent);
override;
//重载此方法
......
published
......
end;

constructor TMyEdit.Create(AOwner: TComponent);//具体实现
begin
inherited Create(AOwner);
//首先具有父亲的所有动作行为
Caption:='';
//本子类的特殊行为
end;

 
Inherited不必非在程序首部,因为实际上Inherited的作用只是调用父类的方法,
所以你可以先做完自己的处理以后,再Inherited。
Inherited在程序首部,一般是先调用父类的方法,然后再进行自己的处理。
Inherited在程序首部,一般是先进行自己的处理,然后再调用父类的方法。
 
inherited是调用被自己屏蔽掉的父类中的方法或属性。
比如:
Constructor TMyComponent.Create(AOwner: TComponent);
// 自己类的create, 屏蔽掉了父类中相同名称与参数表的方法
begin
inherited Create(AOwner);
// 调用父类中被屏蔽的方法.
....
end;

procedure TMyComponent.SetText(s: String);
// 给自己类中Text属性赋值的write方法.
begin
FText := s;
// 给自己类中的私有变量赋值
inherited Text := s;
// 给被屏蔽掉的父类中的Text属性赋值
....
end;
 
Inherited就是自定义构造过程。
 
多人接受答案了。
 
后退
顶部