TBase = class
public
procedure asd;
end;
TSub = class(TBase)
public
procedure asd;
end;procedure TBase.asd;
begin
showmessage('base');
end;procedure TSub.asd;
begin
showmessage('sub');
end;这父类子类的asd过程是两个不同的过程,子类重新定义了asd,delphi6应用开发上说要用reintroduce,但现在不用没有出错,为什么????
但如果
procedure TSub.asd;
begin
inherited;
showmessage('sub');
end;也能执行父类的asd过程,这和virtual和override有些相似他们不同的地方在哪呢?如果不用virtual和override;
b1:TBAse;
s1:TSub;
b1:=TBase.Create;
s1:=TSub.Create;b1.asd // 'base'
s1.asd // 'sub'
-------------------------
b1:=TSub.Create;
s1:=TSub.Create;b1.asd // 'base'
s1.asd // 'sub'b1虽然是通过TSub创建的但TBase,TSub类不是虚拟类,没有虚方法表,所以b1.asd依然调用的类TBase的方法。如果两个类这样定义
TBase = class
public
procedure asd;virtual;
end;
TSub = class(TBase)
public
procedure asd;override;
end;那么
b1:=TSub.Create;
s1:=TSub.Create;b1.asd // 'sub'
s1.asd // 'sub'这就是虚拟方法的本意。我的问题是,reintroduce用在什么地方?究竟有什么作用,是不是可有可无??
public
procedure asd;
end;
TSub = class(TBase)
public
procedure asd;
end;procedure TBase.asd;
begin
showmessage('base');
end;procedure TSub.asd;
begin
showmessage('sub');
end;这父类子类的asd过程是两个不同的过程,子类重新定义了asd,delphi6应用开发上说要用reintroduce,但现在不用没有出错,为什么????
但如果
procedure TSub.asd;
begin
inherited;
showmessage('sub');
end;也能执行父类的asd过程,这和virtual和override有些相似他们不同的地方在哪呢?如果不用virtual和override;
b1:TBAse;
s1:TSub;
b1:=TBase.Create;
s1:=TSub.Create;b1.asd // 'base'
s1.asd // 'sub'
-------------------------
b1:=TSub.Create;
s1:=TSub.Create;b1.asd // 'base'
s1.asd // 'sub'b1虽然是通过TSub创建的但TBase,TSub类不是虚拟类,没有虚方法表,所以b1.asd依然调用的类TBase的方法。如果两个类这样定义
TBase = class
public
procedure asd;virtual;
end;
TSub = class(TBase)
public
procedure asd;override;
end;那么
b1:=TSub.Create;
s1:=TSub.Create;b1.asd // 'sub'
s1.asd // 'sub'这就是虚拟方法的本意。我的问题是,reintroduce用在什么地方?究竟有什么作用,是不是可有可无??
如下面
TBase = class
public
procedure asd;virtual;
end;
TSub = class(TBase)
public
procedure asd;reintroduce; override;
~~~~~~~~~~~~
end;
TSub = class(TBase)
public
procedure asd(i: integer);reintroduce; overload;
~~~~~~~~~~~```
end;