一、继承
关于继承,我只记录了一段话,很经典:
失败的继承关系设计,总是让基类拥有比派生类更多的额外的能力,哪怕是一个函数/方法。因此,记住总是弱化你的基类,强化你的派生类,总是让派生类比基类更强大。
二、多态
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. MySql数据库Update批量更新与批量更新多条记录的不同值实现方法
  2. 百度研究院:招聘计算机视觉和生物计算方向实习生
  3. Oralce null
  4. Spring的7种事务传播行为类型
  5. 这样设计是否更好些~仓储接口是否应该设计成基础操作接口和扩展操作接口
  6. 阿諾爾德的「常微分方程」中對「單參變換羣」的定義好像有問題
  7. zookeeper集群介绍
  8. Extjs中给同一个GridPanel中的事件添加参数的方法
  9. android 振动传感器,Android光线传感器
  10. AutoMapper使用
  11. Angularjs $http.post
  12. uva 104 Arbitrage (DP + floyd)
  13. itlwm驱动_黑苹果系统 macOS 驱动英特尔无线网卡的小教程
  14. Camtasia2022电脑屏幕录像使用录屏教程
  15. 超有范的 logo 在线设计制作工具
  16. WinEdit10 添加论文引用,XeLaTex编译后论文中的引用变成了【?】
  17. Linux和Windows学习日记5
  18. java基于ssh的旅游系统
  19. 将本地docker镜像推送到阿里云仓库
  20. LeetCode876 --- 剑指Offer 22

热门文章

  1. oracle的exp程序,数据库expimp迁移的整个过程,及注意事项
  2. 群晖消息通知 推送服务器,群晖resync服务器
  3. faster rcnn resnet_张航、李沐等人提出ResNet最强改进版:性能提高3%,参数不增
  4. 快捷键截屏_笔记本电脑截屏的快捷键是什么
  5. mysql decimal_MySQL系列之数据类型及约束
  6. 表情识别(四)--多网络级联表情识别
  7. 汇编学习--7.16--直接定址表
  8. html如何转换成电子表,如何轻松将电子表格转换为HTML [快速提示] | MOS86
  9. 嵌入式系统——系统可靠度计算
  10. 归并排序的时间复杂度