zoukankan      html  css  js  c++  java
  • 关于多态的理解,有助于理解TStream抽象类的多态机制。

    有的时候 不是很明白流的机制,因为有内存流  文件流 图片流 等等 他们之间的相互转化 靠的就是流的多态性。。。。

    unit Unit11;
    
    interface
    
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
    
    type
      TForm11 = class(TForm)
        btn1: TButton;
        btn2: TButton;
        procedure btn1Click(Sender: TObject);
        procedure btn2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
      TFuLei = class
        public
          function func1(): string; virtual;
      end;
    
      TZiLei = class(TFuLei)
        public
          function func1(): string; override;
      end;
    
    var
      Form11: TForm11;
    
    implementation
    
    {$R *.dfm}
    
    function TFuLei.func1(): string;
    begin
      Exit('func1');
    end;
    
    function TZiLei.func1(): string;
    begin
      Exit('func2');
    end;
    
    /// <summary>
    /// 注意这里的参数是父类,意思是如果传入子类也是可以的,因为子类拥有父类所有的功能,可以向上递归
    /// 且如果子类的覆盖度了父类的方法,那么传入子类的话,delphi会自动调用子类覆盖后的方法
    /// </summary>
    procedure wokao(ALei: TFuLei);
    begin
      ShowMessage(ALei.func1);
    end;
    
    procedure TForm11.btn1Click(Sender: TObject);
    var
      lei: TFuLei;
    begin
      lei := TFuLei.Create;
      wokao(lei);//func1
      lei.Free;
    end;
    
    procedure TForm11.btn2Click(Sender: TObject);
    var
      lei: TZiLei;
    begin
      lei := TZiLei.Create;
      wokao(lei);//func2
      lei.Free;
    end;
    
    end.

    好了,现在我来证明下,是否可以 wokao的参数是子类,然后传入父类的情况,因为父类并不一定能拥有子类的全部功能。

    可见我的理解是对的,当时子类的时候 不允许 传入父类的实例,会编译不通过。。。

  • 相关阅读:
    python中numpy的用法
    基于逻辑回归识别坐标是否在第一象限
    python变量,函数
    DOM的核心总结
    节点操作
    自定义属性操作
    排他思想及部分案例
    事件基础及操作元素
    获取元素
    DOM 介绍
  • 原文地址:https://www.cnblogs.com/del88/p/5215954.html
Copyright © 2011-2022 走看看