首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 多態機制深度解析:虛擬方法、覆寫與動態綁定實戰

     編輯:Delphi

什麼是多態?

多態簡單來說:同一個方法呼叫,根據物件實際類型執行不同的實作邏輯。在 Delphi 中,透過 virtual(虛擬方法)與 override(覆寫)關鍵字實現執行期動態綁定。

核心程式碼範例

1. 定義基底類別與虛擬方法

TBass = class
  procedure Alert; virtual; // 標記為虛擬,允許子類別覆寫
end;

2. 子類別覆寫方法


TChild1 = class(TBass)
  procedure Alert; override; // 覆寫父類別方法
end;

TChild2 = class(TBass)
  procedure Alert; override;
end;

3. 方法實作


procedure TBass.Alert;
begin
  ShowMessage('is Bass');
end;

procedure TChild1.Alert;
begin
  ShowMessage('is TChild1');
end;

procedure TChild2.Alert;
begin
  ShowMessage('is TChild2');
end;

4. 多態呼叫展示

關鍵在於:變數型別為父類別,實際指向子類別實例。


// 測試 1:基底類別實例
var Bass: TBass;
begin
  Bass := TBass.Create;
  Bass.Alert; // 輸出: is Bass
  Bass.Free;
end;

// 測試 2:子類別 1 實例,指派給父類別變數
var Bass: TBass;
begin
  Bass := TChild1.Create; // 實際建立 TChild1
  Bass.Alert; // 輸出: is TChild1(動態綁定!)
  Bass.Free;
end;

// 測試 3:子類別 2 實例
var Bass: TBass;
begin
  Bass := TChild2.Create;
  Bass.Alert; // 輸出: is TChild2
  Bass.Free;
end;

關鍵概念總結

關鍵字用途
virtual在基底類別宣告,表示「此方法可被覆寫」
override在子類別實作,表示「覆寫父類別同名虛擬方法」
動態綁定執行期根據物件實際類型決定呼叫哪個實作
靜態綁定編譯期決定(非 virtual 方法)

進階補充:動態方法與訊息方法

Delphi 另提供 dynamic(動態方法,節省虛擬方法表空間)與 message(訊息處理)關鍵字,同樣支援多態,但使用情境不同。

總結

多態是物件導向三大支柱之一。善用 virtual/override,配合父類別參考指向子類別實例,即可撰寫出彈性、可擴充的程式碼結構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved