◆在子类中覆盖(override)父类中的虚方法(virtual)时,是否可以替换父方法中的某些语句?或将自己的语句插入到父方法的语句序列中而形成自己的方法?在覆盖父方法时常用到的inherited都做了哪些工作?
在子类中覆盖(override)父类中的虚方法(virtual)时,是否可以替换父方法中的某些语句?或将自己的语句插入到父方法的语句序列中而形成自己的方法?
在子类中覆盖(override)父类中的虚方法(virtual)时,是否可以替换父方法中的某些语句?或将自己的语句插入到父方法的语句序列中而形成自己的方法?
能不能说具体点“子类中通过覆盖或改写继承的方法或函数来实现” 覆盖能做到替换父方法中的某些语句吗?
另外如果我没有父类的源代码怎么办?也就是说如果我没有父类方法的源代码,只知道他执行了某些代码,并想替换他,如何能做到??
而是直接把父类是的代码COPY下来加入你自己的语句形成新的序列.
但是感觉没有这种必要,如果真的要这样才能完成工作,说明你的设计工作没做好
constructor TMyForm.Create(AOwner: TComponent);
begin
inherited;
//下在不要直接写代码指令,而要用过程或函数,这些过程和函数是虚拟得,在子类中覆盖这里的过程或函数来达到目的。不知我是否说明白了
end;
下面给你一个例子,也许能够帮助你理解
//////////////////////////////////////
TParent = class
public
Key:boolean;
procedure a;virtual;
end;
TChild = Class(TParent)
public
procedure a;override;
end;var
Form1: TForm1;implementation
var a:TChild;{$R *.dfm}{ TParent }procedure TParent.a;
begin
showmessage('Parent');
end;{ TChild }procedure TChild.a;
begin
if Key then inherited
else showmessage('Child');
end;procedure TForm1.Button1Click(Sender: TObject);
begin
a.Key:=Not(a.Key);
a.a;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
a:=TChild.Create;
end;end.
可是父类又不是我写的,另外我也没有父类的源代码!看来我的这个问题的答案是否定的!
不过我觉得如果Delphi能加个关键字或函数什么的,并由编译器支持子类修改父类中方法细节的功能是不是会更好更方便呢?大家说?