关于多态的理解,有助于理解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中多态的一些简单理解
什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...
随机推荐
- 第四模块:网络编程进阶&数据库开发 口述
进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 子进程死了之后 ,父进程关闭的时候要清理掉子进程的僵尸进程(收尸),孤儿进程是指父进程先死掉了的,交给init管理. join() 等待子进 ...
- Android 导出traces.txt 遇到的坑
我一直以为traces.txt 导出需要root .因为每当我 cd data ll 然后就会告诉我 Permission denied 后来我问同事,怎么导出traces.txt 文件.同事说很简单 ...
- 内部类inner class
1.什么是内部类,为什么要用内部类? 可以将一个类定义在另一个类的定义内部,这就是内部类. 当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物的内容. 如: class ...
- Java课程目录
Java课程目录 1 年前 大家收藏一下这篇文章,这是所有课程的目录. 第一周: 第一课:进制及计算机表示 第二课:进制习题课,进一步介绍进制的知识 第三节课:Java语言的品味(一),通过stati ...
- 【Binary Tree Right Side View 】cpp
题目: Given a binary tree, imagine yourself standing on the right side of it, return the values of the ...
- 图解-Excel的csv格式特殊字符处理方式尝试笔记(个人拙笔)
Excel格式如下.(截图来自,WPS Office) CSV是一种文本格式的Excel文档格式.不支持Excel的字体特效(比如加粗,颜色)等等的保存. 每一行数据用 "\n" ...
- Java 遍历Map集合的方法
方法一:通过Map.keySet,遍历key和value Map<String, Object> map = new HashMap<>(); for (String key ...
- PyCharm 解决有些库(函数)没有代码提示
问题描述: 如图,当输入 im. 没有智能提示第三库相应的函数或其他提示. 解决方案: python是动态强类型语言,IDE无法判断Image.open("panda.png")的 ...
- juqery基本选择器和层级选择器
1.基本选择器,主要通过标签名称,样式,id等选择标签,如下代码是简单的使用 (1)根据标签或者样式筛选 <!DOCTYPE html> <html lang="en&qu ...
- JavaScript里面的面向对象
1.JavaScript里面没有类,但是利用函数可以起到类似的作用,例如简单的构造方法,跟Python差别不大 function f1(mame,age){ this.Name = name; thi ...