zoukankan      html  css  js  c++  java
  • 理解 Delphi 的类(十一) 深入类中的方法[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.
    
  • 相关阅读:
    SP笔记:交叉实现七行并成一行
    HTML tag 学习
    操作哈希表
    Efficient bipedal robots based on passivedynamic walkers
    Pushing People Around
    ZEROMOMENT PONTTHIRTY FIVE YEARS OF ITS LIFE

    Active Learning for RealTime Motion Controllers
    Accelerometerbased User Interfaces for the Control of a Physically Simulated Character
    Dynamic Response for Motion Capture Animation
  • 原文地址:https://www.cnblogs.com/del/p/1041921.html
Copyright © 2011-2022 走看看