delphi中對override(重寫)和overload(過載)的一些看法
阿新 • • 發佈:2019-01-03
重寫就是用現在的方法覆蓋了繼承過來的方法,過載就是在不改變繼承過來的方法的基礎上重新新增一個方法名字一樣,但引數或返回值是不一樣的。
interface
type TStudent=class
private
//... public
//...
procedure test;
implementation
procedure test; begin showmessage('我是父親'); end;
end .
interface
type
Tstu1=class(TStudent)
private
//...
public
procedure test;override;
implementation
procedure test;
begin
inherited;
showmessage('我是兒子');
end;
end.
下面舉個例子:
unit Unit1;interface
type TStudent=class
private
//... public
//...
procedure test;
implementation
procedure test; begin showmessage('我是父親'); end;
end .
我寫了一個類TStudent是繼承自TObject的,TObject有一個Create建構函式。然而我現在要在TStudent類中過載這個建構函式,我們可以在類的public部分加上constructor Create(FSTR:string);overload;寫這個過載的建構函式的實現(寫在implementation下面)
constructor TStudent.Create(FSTR: string);
begin
showmessage(FSTR);
end;
然後在建立這個類的例項的時候就會有兩個Create建構函式可選,一個沒有引數的,一個是帶引數的。這就是建構函式的過載。
下面說下override,現在有一個類繼承自上面定義的TStudent類,然後要重寫test這個procedure(注意,只有在public或是protected部分宣告的才可以被子類繼承,如果test被宣告在private部分就不能被子類繼承):
unit Unit2;interface
type
Tstu1=class(TStudent)
//...
public
procedure test;override;
implementation
procedure test;
begin
inherited;
showmessage('我是兒子');
end;
end.
在override時,如果override的是procedure,則加上關鍵字inherited; 就會執行父類同名procedure的所有過程,然後再執行子類中特有的過程,如果override的是function則不會執行父類中同名function的內容.這一點要注意下
本人也是初學DELPHI,好象上面的東西描述的不是很準確,只是個人摸索的結果,希望不要誤導大家,還是要多去看下DELPHI面向物件程式設計概念。