关于多态的理解,有助于理解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抽象类的多态机制。的更多相关文章
- java提高篇(四)-----理解java的三大特性之多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- 深入理解OOP(第一天):多态和继承(初期绑定和编译时多态)
在本系列中,我们以CodeProject上比较火的OOP系列博客为主,进行OOP深入浅出展现. 无论作为软件设计的高手.或者菜鸟,对于架构设计而言,均需要多次重构.取舍,以有利于整个软件项目的健康构建 ...
- 理解 Java 的三大特性之多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- 理解java的三大特性之多态(三)
摘自:http://cmsblogs.com/?p=52 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已 ...
- java提高篇(三)-----理解java的三大特性之多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- (转)java提高篇(四)-----理解java的三大特性之多态
面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 继承 ...
- [转]理解java的三大特性之多态
java提高篇(四)-----理解java的三大特性之多态 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外 ...
- 深入理解Java的三大特性之多态
世界上最美丽的东西,看不见也摸不着,要靠心灵去感受. ——海伦·凯勒 面向对象编程有三大特性:封装.继承.多态. 封装隐藏了类的内部实现机制,可以在不影响类使用的情况下改变类的内部结构,并保护数据.对 ...
- 个人对Java中多态的一些简单理解
什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...
随机推荐
- 20145202马超 《Java程序设计》第二周学习总结
一.课后练习题目 1.D 并没有给number赋值导致出现错误. 2.A 10/3相当于10=3*3+1: 10/3=3. 3.D 4.D 很明显,byte类型的数据的话300就会出现溢出的情况. 5 ...
- 亲手搭建一个基于Asp.Net WebApi的项目基础框架2
本篇目的:封装一些抽象类 1::封装日志相关类 2:封装一个Service操作类 3:封装缓存操作类 4:封装其他一些常用Helper 1.1在Framework项目里面建立好相关操作类文件夹,以便于 ...
- linux ubuntu 现在显示的是ubuntu login
linux ubuntu 现在显示的是ubuntu login 如果要进图形界面,你需要安装桌面管理器sudo apt-get install ubuntu-desktop或sudo apt-get ...
- katalon系列一:初识Katalon Studio自动化测试工具
最近准备把公司的系统搞上UI自动化,先是自己用Python+selenium+pytest写了一个框架,开始写case的时候发现效率极其慢.原因为: (1)开发为提高前端响应时间,使用前端路由技术,一 ...
- linux系统下怎么关闭一个端口
netstat -an | grep 22查看22端口 netstat -ntulp |grep 80 //查看所有80端口使用情况
- super和final关键字
一.super关键字 super关键字的使用 JAVA类中使用super来引用父类的属性或者方法,用this来引用当前对象,主要用法: 1.子类的构造函数默认第一行会默认调用父类的无参数构造函数 2. ...
- 操作App.config的类(转载)
http://www.cnblogs.com/yaojiji/archive/2007/12/17/1003191.html 操作App.config的类 public class DoConfig ...
- Struts2 学习笔记
1)Strust2是以WebWork为核心,采用拦截器的机制对用户请求进行处理. 2)Struts2框架结构: 3)简单来看整个Struts2的处理过程可以简单的理解为 用户的请求发送给对应的Acti ...
- ocrosoft Contest1316 - 信奥编程之路~~~~~第三关 问题 J: 外币兑换
http://acm.ocrosoft.com/problem.php?cid=1316&pid=9 题目描述 小明刚从美国回来,发现手上还有一些未用完的美金,于是想去银行兑换成人民币.可是听 ...
- ajax是可以本地运行的
ajax是可以本地运行的,经过验证,可以是可以,但跟浏览器有关,火狐和新IE可以,chrome不可以,旧ie不知道什么原因也不可以.但是浏览器也有它的安全策略,必须是同一目录下的文件可以访问.chro ...