理解 Delphi 的类(七) - 认识类的多态

什么是多态? 我的理解就是: 同样一个方法, 在不同的对象里会有不同的实现, 仅此而已.
unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;Button3: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);procedure Button3Click(Sender: TObject);end;//定义了三个类, 后两个类都继承与第一个类 TBassTBass = classprocedure alert; virtual; {加上 virtual 指示字, 说明这个方法可能会被修改(或叫覆盖)}{这种方法叫虚方法}end;TChild1 = class(TBass)procedure alert; override; {override 表示修改父类的同名方法}end;TChild2 = class(TBass)procedure alert; override;end;varForm1: TForm1;implementation{$R *.dfm}{ TBass }
procedure TBass.alert;
beginShowMessage('is Bass');    {同一个方法, 在不同类里有不同的实现}
end;{ TChild1 }
procedure TChild1.alert;
beginShowMessage('is TChild1'); {同一个方法, 在不同类里有不同的实现}
end;{ TChild2 }
procedure TChild2.alert;
beginShowMessage('is TChild2'); {同一个方法, 在不同类里有不同的实现}
end;//测试1:
procedure TForm1.Button1Click(Sender: TObject);
varbass: TBass; {定义 TBass 的变量}
beginbass := TBass.Create;bass.alert; {is Bass}bass.Free;
end;//测试2:
procedure TForm1.Button2Click(Sender: TObject);
varbass: TBass;            {注意还是定义 TBass 的变量}
beginbass := TChild1.Create; {但这里是通过 TChild1 建立对象}bass.alert; {is TChild1}bass.Free;
end;//测试3:
procedure TForm1.Button3Click(Sender: TObject);
varbass: TBass;            {注意还是定义 TBass 的变量}
beginbass := TChild2.Create; {但这里是通过 TChild2 建立对象}bass.alert; {is TChild2}bass.Free;
end;{总结: 现在同是 bass.alert 方法, 通过不同对象的实现, 有了不同的功能, 这就是多态!}
end.

转载于:https://www.cnblogs.com/del/archive/2008/01/11/1034529.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python退出帮助系统help应该使用exit_python--help - tesion

python help学习python的过程中,难免遇到一些生疏的东西,为此需要参看相关的文档说明。Linux下众所周知有man可以查找系统的命令帮助页;对于python也提供了自己的帮助文档的2种方式:方式一:启动python解释器&#xff0…

试用GitHub Copilot一周后,我给你的建议是:不要使用它

如果你还不知道“GitHub Copilot”,它是GitHub推出“AI程序员”插件,可以根据你在VS Code输入的部分代码或注释,自动生成完整的代码。在我上次的文章中,演示了GitHub Copilot是如何工作的。刚开始,我对能够试用GitHub …

你知道长颈鹿是怎么睡觉的吗? | 今日趣图

全世界只有3.14 % 的人关注了青少年数学之旅一图教你打太极拳其实指甲也是一味药材你知道长颈鹿是怎么睡觉的吗?健身和肥宅的区别Win10的内置桌面并不是P的而是搭实景拍出来的当你玩游戏的时候...这才是第一个用蚂蚁花“被”...呗的人一般人的身高和他的臂展差不多一…

华仔andylau

好久没关注华仔,今天到华仔天地会逛下,转几张图片

ubuntu下搭建java web开发环境的详细步骤

系统环境:Ubuntu 10.10(linux-kernel 2.6.35-22)安装版本:apache-tomcat-7.0.29.tar.gz(官方网址:Apache Tomcat)安装步骤:1、下载 Tomcat下载 apache-tomcat-7.0.29.tar.gz&#xf…

C#网络类智能开关控制板实例

网络类智能开关控制板采用 TCP/IP 协议与控制主机(PC 机)进行通讯,运行稳定可靠,传输距离远,尤其适合不方便布线的场所。每块开关板分配一个唯一的 IP 地址,通过 IP 地址进行控制数据的传输区分&#xff1b…

.net 出现的异常

1 --------------------------- Microsoft Development Environment --------------------------- 没有可用于当前位置的源代码。 --------------------------- 确定 --------------------------- 2--------------------------- Microsoft 开发环境 -----------------------…

选择湿度传感器注意的若干问题

人类的生存和社会活动与湿度密切相关。随着现代化的实现,很难找出一个与湿度无关的领域来。由于应用领域不同,对湿度传感器的技术要求也不同。从制造角度看,同是湿度传感器,材料、结构不同,工艺不同.其性能…

unix系统mysql卸载教程_Linux操作系统下MySQL的卸载、安装全过程

Linux下卸载MySQL1、查找以前是否装有MySQL命令:rpm -qa|grep -i MySQL可以看到MySQL的两个包:MySQL-4.1.12-3.RHEL4.1MySQLclient10-3.23.58-4.RHEL4.12、删除MySQL删除命令:rpm -e --nodeps 包名( rpm -ev MySQL-4.1.12-3.RHEL4.1 )3、删除…

扎哈遗作:北京大兴机场,耗资800亿,被英国《卫报》评为新世界七大奇迹!...

全世界只有3.14 % 的人关注了青少年数学之旅在经历了7次综合模拟演练、3场验证试飞之后,北京大兴国际机场终于迎来它“凤凰展翅”的高光时刻。这也意味着,北京将成为世界首个拥有双国际枢纽机场的城市。就连张口闭口说我们吃不起茶叶蛋、买不起榨菜的湾湾…

MVP on Board 没用小技巧

七月入选了微软 MVP,本文记录 on board 过程中遇到的小问题和没用小技巧。MVP Portal 当你收到来自微软的确认邮件之后,你将正式被接纳为微软现任 MVP 的一员。从此刻开始,你便拥有了 MVP portal 上相关的操作权限。MVP portal 的地址是 http…

JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)

(一).概述 现在有好多比较优秀的客户端脚本语言组件, 如: Prototype、YUI、jQuery、mootools、Bindows, Scriptaculous, FCKEditor 等, 都非常不错, 最近研究了一下 jQuery,在学习时顺便整理了一个教程, 后面会有示例代码下载链接. jQuery是JavaScript语言的一个新的资源库(…

一条未发出的短信

男孩和女孩是一对情侣,女孩喜欢感受下雨,男孩种是在下雨的时候为女孩撑着伞,伞的大半部分都是遮着女孩的,每次雨水都打湿着男孩的身子,他没说什么,只是默默看着女孩陶醉的脸。他觉得很幸福,女孩…

普通人改变命运最关键的这几种方法

全世界只有3.14 % 的人关注了青少年数学之旅在工作之余,我们大量的碎片时间被手机占据。无意识的刷手机打发无聊,不如有趣又高品质的积累。我们特意精选了在不同领域的几个高品质公众号代表,希望让你在快乐打发闲暇时光的同时,也能…

JavaScript Dom编程艺术

当我对JavaScript还停留在只认识这几个字母的时候,有一天我突然心血来潮,在网上下了DOM Scripting的样章,照着里面的例子写了我平生第一个能让我知所以然JavaScript,在浏览器运行成功,兴奋不已,从此能把学习…

这批.Net程序员水平不行啊!居然ASP.NET Core Middleware都不会用

最近问了几个面试同一个问题:如果有多个自定义Middleware,如何控制它们的执行顺序(比如先判断用户合法再写访问日志)。居然大部分人答不上来?! 对此,你有什么看法?ASP.NET Core Midd…

在Heroku上部署(托管)Rails项目

2019独角兽企业重金招聘Python工程师标准>>> ①、安装heroku: $ gem install heroku ②、先要生成一个公钥,使用命令: $ ssh-keygen -t rsaGenerating public/private rsa key pair. Enter file in which to save the key (/home/…

企业流程管理平台V2.0介绍

一个软件产品的核心价值在于它适应变化的能力,软件业在中国发展的二十年的历程里,您也许选择过也痛苦过;软件本身并不具有任何直接的价值,但它能为您的企业带来信息的价值、效率的价值及降低成本的价值,然而&#xff0…

java关于异常的面试程序题_Java挑战:最难的十个面试题(附答案)「下」

原标题:Java挑战:最难的十个面试题(附答案)「下」版权声明:本文为CSDN博主「华为云」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/devcloud/a…

数学知识点大集合!有了它学数学真的很简单!

▲ 点击查看很多学生对于数学这门学科都有莫名的恐惧感,不知道怎样学才能学得好。其实,好的方法能让学习效率达到最佳效果。有的时候,孩子学习不好,真的不是因为孩子笨,而是这种方法不适合孩子。其实小学数学学习的难度…