程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 理解 Delphi 的類(七) - 認識類的多態

理解 Delphi 的類(七) - 認識類的多態

編輯:Delphi

 什麼是多態? 我的理解就是: 同樣一個方法, 在不同的對象裡會有不同的實現, 僅此而已.

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.


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved