https://www.cnblogs.com/760044827qq/p/3777369.html
[override]-過載
Override 表示是覆蓋方法;要求祖先類中必須有該方法的定義,並且參數的順序和類型
override 關鍵字來說明函數覆蓋的。被覆蓋的函數必須是虛(virtual)的,或者是動態(dynamic)的,也就是說該函數在聲明時應該包含這兩個指示字中的一個,比如:
procedure Draw; virtual;
在需要覆蓋的時候,只需要在子類中用override 指示字重新聲明一下就可以了。
procedure Draw; override;
[overload]-重載
overload 表示是重載方法;用於一個類中有許多同名的方法帶著不同的參數表的情形;
方法定義關鍵字的說明:
virtual 虛類型
dynamic 動態
overload 重載
override 重寫
abstract 抽象
virtual方法為執行速度做了優化,而dynamic方法則為代碼大小做了優化;經常被覆蓋的
virtual 和 dynamic定義的虛函數,都是為了子類override用的,只不過它們的實現不一樣。vitrual 占用的空間大點,但速度快些。dynamci正好相反.
virtual 使用時機:很末端的類別,或這個方法在後代可能加以改寫 應宣告成virtual 來爭取速度
dynamic 使用時機:越基礎的類別,或後代改寫方法可能性不高 宣告成 dynamic ,省的進出點一在出現子代的VMT
abstract 使用時機:建立標準,父 本身是不做事的, 但 子 代 要在implementation 實作區一定要有程式碼,不然 編譯 會通過但依執行會出錯
message 表示是消息處理方法;在關鍵字message後面的值指明了這個方法要響應的消息;用消息處理方法來響應Windows的消息,這樣就不用直接來調用它;
abstract 表示是抽象方法;是沒有實現的方法,並且必須是virtual或dynamic方法,即
procedure DoSomething; virtual; abstract;
reintroduce表示是重新聲明的方法;用於方法的名稱與祖先類中的某個方法名稱相同的情形;
[inherited]
inherited 就是调用祖先类的函数,如果不带参数就是默认调用同名函数
如果带参数则表明子类中的函数个数可能比祖先类要多取其中的几个参数传过去
例如
祖先类有个函数 Create(AName:string);
子类有个函数 Create(AName:string;AComponent:TObject);override;
那么子类的Create函数内就可以这样调用祖先类:
procedure TAClass.Create(AName:string;AComponent:TObject);
begin
Inherited Create(AName);
end;