Delphi中override overload reintroduction的用法

1、override overload reintroduce的中文叫法是什么?
override:覆蓋;overload:重載;Reintroduce:重定義
2、在子類中override或overload父類中的動態或虛擬方法后是否會改變父類中的相應方法?
不會
3、self是怎么回事,怎么使用?
Self因為這這個對象本身,例如,在TForm1的OnCreate事件中寫Self指的是TForm1實例化后的對象,如果TForm1上有一個TButton叫做Button1,那么OnButton1Click中寫的Self也是TForm1實例化后的對象,
4、reintroduce與override overload有何區別,怎么使用?
在子孫類中要聲明一個與祖先類中參數不同的方法的時候用Reintroduce,
但需要重新定義一個祖先類總的虛擬的或者動態的方法的時候,要用到Override;如果祖先類中的方法不是虛擬的或者動態的(定義的時候有virtual;就是虛擬的,有dynamic;就是動態的);那么是沒有辦法override的
至于Overload,一般適用于定義一組不同參數的函數,這些函數也可以不是Of Objects(中文該怎么說?)。
reintroduce引入是為了屏蔽父類的一個虛方法,而在子類中生成一個新的方法;overload是為了處理同名的方法有不同的參數而設計的;
其實你不使用reintroduce也會覆蓋屏蔽父類的方法的但是會產生一個警告,
使用了這個關鍵字,表明你要屏蔽這樣不會產生警告的!

如果類不從別的類繼承(實際上也就是從TObject繼承),
constructor Create; virtual; //virtual表示虛函數,表示可以被子類override;
destructor Destory: virtual;
如果從其它類繼承,如:TForm
constructor Create(AOwner: TComponent); override;
destructor Destory: override;
如果子類想再overload一個函數,則必須加上reintroduce和overload
constructor Create(AOwner: TComponent); overload; override; //這里的overload必面在override之前.
constructor Create(AOwner: TComponent; AParent: TWinControl); reintroduce; overload;
例子
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
Ta = class(TObject)
public
constructor Create; virtual;
destructor Destory; virtual;
procedure aaa; virtual;
end;
tb = class(ta)
public
constructor Create; overload; override;
constructor Create(a: String); reintroduce; overload;
destructor Destory; override;
procedure aaa; overload; override;
procedure aaa(a: string); reintroduce; overload;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
c: tb;
public
{ Public declarations }
end;

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容