什麼是多態? 我的理解就是: 同樣一個方法, 在不同的對象裏會有不同的實現, 僅此而已.
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.