zoukankan      html  css  js  c++  java
  • (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.




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

  • 相关阅读:
    PostgreSQL的数据类型
    博客园背景页面动态特效
    css ie7中overflow:hidden失效问题及解决方法
    win10的安装、win10启动盘制作
    windows win7 win10 多系统启动菜单 多系统引导设置
    微博加关注按钮
    {转}一位北京差生9年的北京生活
    最全的CSS浏览器兼容问题
    网站开发命名详细规范
    <meta http-equiv = "X-UA-Compatible" cotent = "IE=edge,chrome=1"/>
  • 原文地址:https://www.cnblogs.com/mdnx/p/2576124.html
Copyright © 2011-2022 走看看