对多态性了如指掌的大仙请进(长假期前是不许请假,不许迟到 ^-^),学生等你授课。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
Label2: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TA = class
public
function ShowString: string; virtual; abstract;
end;
TAa = class(TA)
public
function ShowString: string; override;
end;
TAaa = class(TAa)
public
function ShowString: string; override;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
var
aa:TAa;
aaa:TAaa;
bb:TAa;
begin
aa:=TAa.Create;
aaa:=TAaa.Create;
Label1.Caption:=aa.ShowString;
bb:=TAa(aaa);
Label2.Caption:=bb.ClassName;
Label3.Caption:=bb.ShowString;
end;
{ TAb }
function TAaa.ShowString: string;
begin
inherited ShowString;
Result:='This is return by method of TAaa!';
end;
{ TAa }
function TAa.ShowString: string;
begin
Result:='This is return by method by TAa!';
end;
end.
以上代码运行后,你猜猜bb是哪个类的实例?没错,就是TAaa而不是预期中的TAa,为什么TAa(aaa)没有期作用,请大仙们授课。
(运行环境:Delphi5、Windows2000)