什么是多态? 我的理解就是: 同样一个方法, 在不同的对象里会有不同的实现, 仅此而已.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); end; //定义了三个类, 后两个类都继承与第一个类 TBass TBass = class procedure alert; virtual; {加上 virtual 指示字, 说明这个方法可能会被修改(或叫覆盖)} {这种方法叫虚方法} end; TChild1 = class(TBass) procedure alert; override; {override 表示修改父类的同名方法} end; TChild2 = class(TBass) procedure alert; override; end; var Form1: TForm1; implementation {$R *.dfm} { TBass } procedure TBass.alert; begin ShowMessage('is Bass'); {同一个方法, 在不同类里有不同的实现} end; { TChild1 } procedure TChild1.alert; begin ShowMessage('is TChild1'); {同一个方法, 在不同类里有不同的实现} end; { TChild2 } procedure TChild2.alert; begin ShowMessage('is TChild2'); {同一个方法, 在不同类里有不同的实现} end; //测试1: procedure TForm1.Button1Click(Sender: TObject); var bass: TBass; {定义 TBass 的变量} begin bass := TBass.Create; bass.alert; {is Bass} bass.Free; end; //测试2: procedure TForm1.Button2Click(Sender: TObject); var bass: TBass; {注意还是定义 TBass 的变量} begin bass := TChild1.Create; {但这里是通过 TChild1 建立对象} bass.alert; {is TChild1} bass.Free; end; //测试3: procedure TForm1.Button3Click(Sender: TObject); var bass: TBass; {注意还是定义 TBass 的变量} begin bass := TChild2.Create; {但这里是通过 TChild2 建立对象} bass.alert; {is TChild2} bass.Free; end; {总结: 现在同是 bass.alert 方法, 通过不同对象的实现, 有了不同的功能, 这就是多态!} end.