メモ。仮想メソッドと継承、オーバーライドについて。
一つ目。
program methods; {$APPTYPE CONSOLE} type TBase = class public procedure Say; end; TExtend = class(TBase) public procedure Say; end; procedure TBase.Say; begin WriteLn('Base'); end; procedure TExtend.Say; begin WriteLn('Extend'); end; var obj: TBase; begin obj := TExtend.Create; try obj.Say; finally obj.Free; end; end.
結果は「Base」。
2つ目。
program methods_virtual; {$APPTYPE CONSOLE} type TBase = class public procedure Say; virtual; end; TExtend = class(TBase) public procedure Say; override; end; procedure TBase.Say; begin WriteLn('Base'); end; procedure TExtend.Say; begin WriteLn('Extend'); end; var obj: TBase; begin obj := TExtend.Create; try obj.Say; finally obj.Free; end; end.
結果は「Extend」