深入类中的方法(7)- 关于 inherited
// inherited 就是调用父类方法的一个特殊命令; 举例: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); end; {建立父类, 类中包括一个函数 Fun 和一个等待覆盖的虚方法 Proc} TBass = class procedure Proc; virtual; function Fun(x,y: Integer): string; end; {建立四个子类, 分别覆盖父类的虚方法} TChild1 = class(TBass) procedure Proc; override; end; TChild2 = class(TBass) procedure Proc; override; end; TChild3 = class(TBass) procedure Proc; override; end; TChild4 = class(TBass) procedure Proc; override; end; var Form1: TForm1; implementation {$R *.dfm} { TBass } function TBass.Fun(x, y: Integer): string; begin Result := IntToStr(x + y); {父类函数是返回两个数的和} end; procedure TBass.Proc; begin ShowMessage('TBass'); {父类的虚方法会弹出信息: TBass} end; { TChild1 } procedure TChild1.Proc; begin inherited Proc; {调用父类的 Proc 方法} end; { TChild2 } procedure TChild2.Proc; begin inherited; {调用父类的同名方法可以省略方法名} ShowMessage('TChild2'); {然后弹出自己的信息框} end; { TChild3 } procedure TChild3.Proc; begin ShowMessage('TChild3'); {先弹出自己的信息框} inherited; {再调用父类的同名方法} end; { TChild4 } procedure TChild4.Proc; begin ShowMessage(inherited Fun(11,22)); {调用父类的那个求和的函数} end; {测试} procedure TForm1.Button1Click(Sender: TObject); var c1: TChild1; c2: TChild2; c3: TChild3; c4: TChild4; begin c1 := TChild1.Create; c2 := TChild2.Create; c3 := TChild3.Create; c4 := TChild4.Create; c1.Proc; {显 示: TBass} c2.Proc; {先显示: TBass; 再显示: TChild2} c3.Proc; {先显示: TChild3; 再显示: TBass} c4.Proc; {显 示: 33; 11+22=33吗} c1.Free; c2.Free; c3.Free; c4.Free; end; end.
编程语言无所谓高低级,唯适用罢了。语言结构再天花乱坠,富丽堂皇终不过CPU上的0和1。