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