• (7) 抽象类


    unit Unit1;

    interface

    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    // 父类(抽象类)
      TMyForm = class abstract  //抽象类, 在D7上好像不能这样写。
    //strict 是delphi2007以上版本新增的关键字(包括2007),用于在同一PAS文件夹下保护类私有成员不被使用。如果父类与子类不在同一单元下可以省略
        strict private
          FName : string;
          FAge : Integer;
        protected
          procedure ShowName(Name:string;Age:Integer);virtual;abstract;  //抽象方法,一个类中有一个抽象方法即成了抽象类,抽象类不可创建对象,只能通过子类创建
      end;

    // 子类
      TMy = class(TMyForm)
        Strict private
          SName : string;
          SAge : Integer;
        protected
          constructor create;
          destructor  Destroy;
          procedure ShowName(Name:string;Age:Integer);override; //覆盖抽象方法
      end;

    var
      Form1: TForm1;
    implementation

    {$R *.dfm}



    { My }

    constructor TMy.create;
    begin
      SName := 'Tony';
      SAge := 19;
      ShowName(SName,SAge);
    end;

    destructor TMy.Destroy;
    begin
      SName := 'Tom';
      SAge := 19;
      ShowName(SName,SAge);
    end;

    procedure TMy.ShowName(Name: string; Age: Integer);
    begin
      ShowMessage(Name + IntToStr(Age));
    end;

    //..........................................................................

    {实现过程}
    procedure TForm1.Button1Click(Sender: TObject);
    var
      My1 : TMy;        //子类对象
      My2 : TMyForm;    //父类对象
    begin
      My1 := TMy.create;     //子类创建实例
      //父类创建实例,但是父类只能通过子类来创建。 (其实也可以写成 My2 := TMyForm.create 这样可以编译程序,但是这样做没有任何意义,而且不安全。)
      My2 := TMy.create; //这里也会执行子类的ShowName方法。 输出名字与年龄;
      My1.Free;
      My2.Free;
    end;

    end.




    最后总结 :
             抽象类没有实现过程。
             感觉抽象类的存在就是给子类做一个奠基, 让子类必须包含这些属性/方法,比如: 定义一个猫科动物类,猫科动物有很多种,老虎,狮子,豹子等等
             但是我们不能在猫科动物这个类中把所有动物都写进去,因为不同的动物还有不同的生活习惯,所以,抽象类就提供了这样一个规则。我定义一个猫科动物的
             抽象类,猫科动物必须包含一个食物的属性,而子类就可以根据需要修改食物。  至此,抽象类的个人理解完成

  • 相关阅读:
    教育网玩QQ游戏解决办法
    国家重点实验室分布<转>
    MySQL存储过程错误No data zero rows fetched, selected, or processed
    安装Oracle Developer后 pl sql无法使用
    Jsp开发入门
    开源项目MiniOA协同办公系统介绍
    JavaScript实现网页单击事件
    (转)普及基础知识一
    “人脸识别程序”总结
    (转)如何加速Altera的EDA工具? (IC Design) (Quartus II) (Nios II) (SOPC Builder)
  • 原文地址:https://www.cnblogs.com/mdnx/p/2576124.html
Copyright © 2020-2023  润新知