关于多态的理解,有助于理解TStream抽象类的多态机制。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于多态的理解,有助于理解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的参数是子类,然后传入父类的情况,因为父类并不一定能拥有子类的全部功能。
可见我的理解是对的,当时子类的时候 不允许 传入父类的实例,会编译不通过。。。
以上是关于关于多态的理解,有助于理解TStream抽象类的多态机制。的主要内容,如果未能解决你的问题,请参考以下文章