一、继承
关于继承,我只记录了一段话,很经典:
失败的继承关系设计,总是让基类拥有比派生类更多的额外的能力,哪怕是一个函数/方法。因此,记住总是弱化你的基类,强化你的派生类,总是让派生类比基类更强大。
二、多态
Charlie Calvert对多态的描述——多态性是允许用户将父对象设置成为与一个或更多的它的子对象相等的技术,赋值之后,基类对象就可以根据当前赋值给它的派生类对象的特性以不同的方式运作。
更简单地说就是:多态性允许用户将派生类类型的指针赋值给基类类型的指针。多态性在Object Pascal中是通过虚方法(Virtual Method)实现的。
         什么是“虚方法”?虚方法就是允许被其派生类重新定义的方法。派生类重新定义基类虚方法的做法,称为“覆盖”(override)。
两个概念:覆盖(override)和重载(overload):
覆盖是指派生类重新定义基类的虚方法的方法。而重载,是指允许存在多个同名函数,这些函数的参数表不同(或许是参数个数不同,或许是参数类型不同,或许两者都不同)。重载的概念并不属于“面向对象编程”。重载的可能的实现是:编译器根据函数不同的参数表,对同名函数的名称做修饰,然后这些同名函数就成了不同的函数(至少对于编译器来说)。
        重载:函数的调用入口地址在编译期间就已经静态(记住:是静态!)确定了。这样的确定函数调用入口地址的方法称为早绑定。
        覆盖:当派生类重定义了基类的虚方法后,由于重定义的派生类的方法地址无法给出,其调用地址在编译期间便无法确定,故基类指针必须根据赋给它的不同的派生类指针,在运行期动态地(记住:是动态!)调用属于派生类的虚方法。这样的确定函数调用地址的方法称为晚绑定。
引用一句Bruce Eckel的话:“不要犯傻,如果它不是晚绑定,它就不是多态”。
注意:重载只是一种语言特性,与多态无关,与面向对象也无关!
        封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块,它们的目的都是为了代码重用。而多态则是为了实现另一个目的——接口重用。

转载于:https://blog.51cto.com/wzcsying/76094

Delphi高手突破学习笔记三相关推荐

  1. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  2. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  3. Ethernet/IP 学习笔记三

    Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...

  4. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  5. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  6. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  7. Mr.J-- jQuery学习笔记(三十二)--jQuery属性操作源码封装

    扫码看专栏 jQuery的优点 jquery是JavaScript库,能够极大地简化JavaScript编程,能够更方便的处理DOM操作和进行Ajax交互 1.轻量级 JQuery非常轻巧 2.强大的 ...

  8. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  9. ROS学习笔记三:创建ROS软件包

    ,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...

最新文章

  1. 快速破解哈希密文findmyhash
  2. Git入门之上传本地项目至Github(一)
  3. linux 运行scrapy,python 文件 运行 scrapy
  4. 最全的mysql 5.7.13_最全的mysql 5.7.13 安装配置方法图文教程(linux) 强烈推荐!
  5. 二维数组各行求和_JS数组reduce()方法详解及高级技巧
  6. cygwin-1.7 离线安装包_【软件安装管家】ArcGIS 10.7 软件安装包+安装教程
  7. 自动驾驶的Pipline -- 如何打造自动驾驶的数据闭环?(上)
  8. 计算机专业的描述,计算机专业描述怎么写
  9. 写给准备用mcafee8.5i企业版的朋友
  10. (转载)软件测试全套教程,软件测试自学线路图
  11. 大学英语六级考试题型分值分配、时间分配、做题策略
  12. 通过securecrt连接ubuntu12.04不能使用insert键及配色问题
  13. openlayers3 ol3热力图 json
  14. 落花已去,相思成冢。十月的杜鹃雨,下得纷纷扬扬。我走在花瓣雨下,回忆我们曾经的甜蜜温馨,一回首,一抬头,仿佛你就在灯火阑珊处。那些掉落在地上的杜鹃,成了相思的墓,也许是为了祭奠我们曾经的美好。 杜鹃
  15. 武汉工程大学第一届程序设计女生赛(牛客contest 4746)解题报告 Apare_xzc
  16. 踩坑日志1----从zuulFilter到Filter
  17. 手机直播原生源码可以搭建哪些直播app当中的功能
  18. 看一看golang官方包:io
  19. 容器和虚拟机水火不容?不存在的!
  20. 对java后端的一些学习建议

热门文章

  1. shell 启动java程序_Shell 脚本启动java程序
  2. java非阻塞io流_阻塞式和非阻塞io流初认识
  3. emq与mysql_EMQ X 插件持久化系列 (五)MySQL MQTT 数据存储
  4. html立方体旋转展开,css3技术设计立方体旋转发光效果动图
  5. 虚拟机下载和使用说明
  6. JAVA 中 Redis与ehcache对比与使用
  7. oracle sql中打印,在Oracle SQL Developer SQL工作表窗口中打印文本
  8. python如何收集数据库_利用Python操作mysql数据库
  9. python求两个数的最大值、用带参函数实现_Python有参函数使用代码实例
  10. Python 柱状图 横坐标 名字_Python爬虫实例(二)——爬取新馆疫情每日新增人数