{使用起來沒看出區別!}
[9] - 不能被覆蓋的方法與不能被繼承的類
{
[10] - 構造方法與析構方法
抽象類是一定要被繼承才可以使用的; 抽象方法是一定要被覆蓋才可以使用的.
現在說的是不能被覆蓋的方法, 與不能被繼承的類.
}
//譬如:
TA = class
procedure Proc; virtual; {TA 中的虛方法, 將要被覆蓋}
end;
TB = class(TA)
procedure Proc; override; {覆蓋}
end;
TC = class(TB)
procedure Proc; override; {再次覆蓋}
end;
//假如要設定 TB.Proc 為最終方法, 不允許再覆蓋了, 需要 final 指示字.
TA = class
procedure Proc; virtual; {TA 中的虛方法, 將要被覆蓋}
end;
TB = class(TA)
procedure Proc; override; final; {最終覆蓋}
end;
TC = class(TB)
//procedure Proc; override; {再覆蓋不行了}
end;
//用 class sealed 是不能被繼承的
TMyClass = class sealed(TObject)
//...
end;
//構造方法就是對象建立時調用的方法; 析構方法就是對象銷毀時調用的方法. 如:TMyClass = class(TObject)
public
constructor Create; {構造方法}
destructor Destroy; override; {析構方法}
end;
{幾個要點:
這兩個方法都可以追溯到所有類的祖先類 TObject;
它們都屬於類方法, 盡管沒有 class 標識符;
但和類方法也有區別: 一般的類方法不能使用類中非靜態數據; 但它們可以.
必須使用 constructor 和 destructor 來定義, 但名稱未必是: Create 與 Destroy;
如果不使用 Create 與 Destroy 的命名會帶來很多麻煩, 沒必要嘗試.
我們自己的代碼在 Create 中是執行在父類的 Create 代碼之後; 在 Destroy 中執行 在之前;
所以, 一般會用這樣的語句格式:
}
constructor TMyClass.Create;
begin
inherited;
//...
end;
destructor TMyClass.Destroy;
begin
//...
inherited;
end;
{
Create 是我們用得最多的方法; 但 Destroy 是我們用得最少的方法;
因為通過 Free 調用 Destroy 更安全一些.
Destroy 是一個虛方法; Create 在祖先類中雖然是靜態方法, 但在很多實用的類中也 成了虛方法;
所以在覆蓋或重載時應區別對待.
}
// Create 應該是受到編譯器特別對待的一個方法, 譬如:
TMyClass = class(TObject)
public
constructor Create;
end;