1.6 继承
对象这种观念,本身就是十分方便的工具,使得你可以通过概念将数据和功能封装到一起,因此可以对问题空间的观念给出恰当的表示,而不用受制于必须使用底层机器语言。
遗憾的是,这样做还是有很多麻烦:在创建了一个类之后,即使另一个新类与其具有相似的功能能,你还是得重新创建一个新类。如果我们能够以现有的类为基础,复制它,然后通过添加和修改这个副本来创建新类那就好多了。通过继承便可以达到这样的效果,不过也有例外,当“源类”(基类,超类,父类)发生变动时,被修改的“副本”(导出类,继承类,子类)也会反应出这些变动。
继承使用基类型和导出类型的概念表示了类型之间的相似性。一个基类型包含其所有导出类型所共享的特性和行为。可以创建一个基类型来表示系统中某些对象的核心概念,从基类型众导出其他类型,来表示此核心可以被实现的各种不同方式。
对使用面向对象设计的人们来说,困难之一是对于通过使用对象,类型层次结构作为主要模型。从开始到结束过于简单了。对于训练有素,善于寻找复杂的解决方案的头脑来说,可能会在一开始被这种简单性给难倒。
当继承现有类型时,也就创造了新的类型。这个新的类型不仅包括现有类型的所有成员,而且更重要的是它复制了基类的借口。通过继承而产生的类型等价性是理解面向对象程序设计方法内涵的重要门槛。
由于基类和导出类具有相同的基础接口,所以伴随此接口的必定有某些具体实现。有两种方法可以使基类与导出类产生差异。
- 第一种方法非常直接:直接在导出类中添加新方法。
- 第而种也是更重要的一种使导出类和基类之间产生差异的方法是改变现有基类的方法和行为,这被称为覆盖(overriding)基类方法。
1.6.1 “是一个(is a)”与“像一个(is like a)”关系
对于继承可能会引发某种争论:继承应该只覆盖基类的方法。在某种意义上,这是一种处理继承的理想方式。我们称之为(is a)关系。这可以被视为替代原则。
有时候必须在导出类型最终添加新的接口元素,这样也就扩展了接口。这个新的类型仍然可以替代基类,但是这种替代并不完美,因为基类无法访问新添加的方法。我们称之为(is like a)关系。尽管新对象的接口已经被扩展了,但是现有系统除了原来借口之外对其他东西一无所知。
当你看到替代原则时,很容易认为这种方式(纯粹替代)是唯一可行的方式,而且事实上,用这种方式设计是很好的。但是你会时常发现,同样显然的是你必须在导出类的借口中添加新方法。只要仔细审视,良种方法的使用场合应该是相当明显的。
举例:当我们设计一个数据库的时候,可以设计一个 C/S 端管理数据。同时我们需要一个 B/S 端来支持更加简单的远端操作!这样 B/S 模式完全可以使用 C/S 端的基类,我们只需要扩展它就可以完成工作(比如:添加 JSON 数据处理方法)。整体结构也会比较清晰!
本文首发于: 一切都是对象-读书笔记-蜘蛛网间
分享到:
相关推荐
C语言学习导论-笔记-C语言学习
物联网导论--第1章31.pptx
算法导论第三版练习题15.2-2的C++实现方案
人工智能导论作业-用 PyTorch 实现的中文文本情感分类网络机器学习期末作业.zip个人98分期末大作业项目,代码完整下载可用。主要针对计算机相关专业的正在做课程设计和期末大作业的学生和需要项目实战练习的学习者。...
物联网导论--第13章_物联网中的智能决策v1135.pptx
算法导论--编程中经典的经典,值得每一位程序员用心品读
机器学习导论作业-基于matlab实现三层卷积神经网络实现手写数字识别源码.zip 【优质项目推荐】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答...
电子商务导论--第04章《电子商务——管理与社交网络视.pptx
《地理信息系统导论--陈建飞》是一本深入探讨GIS技术的专业著作,旨在为读者提供全面的GIS理论知识和实践应用。GIS,全称为Geographic Information System,它整合了多种科学领域,包括计算机科学、信息科学、测绘...
“学习笔记”之《算法导论》----第六部分----图算法----第二十六章----最大流-附件资源
电子信息专业 - 考研复试笔记分享(软件工程导论-第六版 + 管理信息系统-马慧) 包括: 软件工程导论-第六版 知识点 管理信息系统-马慧 知识点 编译原理 主要知识点 计算机网络 主要知识点 数据库 知识点及常规操作
《人工智能导论》是深入理解和掌握人工智能核心概念与技术的重要教材。这门学科的起源可以追溯到1956年,由斯坦福大学教授约翰·麦卡锡在一次学术会议上首次提出“人工智能”这一概念,标志着AI作为一个独立学科的...
汪小帆的网络科学导论一书PPT,一般缺少了这个第七章。
计算机二级考试导论部分资料(包括知识点总结和大量练习题),希望对大家有帮助
计算机导论--实验5.zip
软件工程导论课设-超市管理系统课程设计.docx软件工程导论课设-超市管理系统课程设计.docx软件工程导论课设-超市管理系统课程设计.docx软件工程导论课设-超市管理系统课程设计.docx软件工程导论课设-超市管理系统...
软件工程导论课设-超市管理系统课程设计.pdf软件工程导论课设-超市管理系统课程设计.pdf软件工程导论课设-超市管理系统课程设计.pdf软件工程导论课设-超市管理系统课程设计.pdf软件工程导论课设-超市管理系统课程...
NLP导论作业-句法分析器+数据+源代码+文档说明(高分项目),含有代码注释,满分大作业资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业...
工程导论--项目开发方案.pdf