- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 继承与多态 5.1 继 承 5.1.1 继承的概念 面向对象程序设计里的继承机制模仿了现实中IS-A关系(层次关系),如车辆可以分为机动车和非机动车,它们拥有车辆的共同特征,同时又有自己特有的属性;机动车又可以分为内燃机车和电车,它们拥有机动车的共同特征,同时又有自己特有的属性;……也就是说,各种各样的车辆形成了图5-1所示的一棵继承树。 图5-1 车辆的继承树 面向对象程序中继承实际上是存在于两个类之间的一种关系。当一个类A能够获取另一个类B中所有非私有成员的定义作为自己的一部分或全部时,就称这两个类之间具有继承关系。被继承的类B称为父类或超类,继承了父类或超类的属性和方法的类A称为子类。 一个父类可以同时拥有多个子类,这时这个父类实际上是所有子类公共属性和公共方法的集合,而每一子类则是父类的特殊化,是在父类的基础之上对公共属性和方法在功能、内涵方面的扩展和延伸。使用继承具有以下好处:降低了代码编写中的冗余度,更好地实现了代码复用的功能,从而提高了程序编写的效率;由于降低了代码的冗余度,使得程序在维护时就变得非常方便。 例如,要实现对各种电话卡的管理,声明定义相应的卡类,可以通过两种方法来实现:第一种方法是对每一种卡都分别独立定义一个类,如图5-2所示;第二种方法是使用继承来定义相应的类,各种电话卡类的层次结构、属性和方法如图5-3所示。 图5-2 独立定义的电话卡类 图5-3 使用继承定义的电话卡类 从图5-2中可以看出,第一种方法定义的各类是相互独立的,所以每一个电话卡类中都定义自己的属性或方法。这样的定义显得非常冗余,大量地重复一些共有的成员,同时,后期的维护工作也非常繁琐。例如程序需要修改“剩余金额”这个属性的数据类型,那么将对所有具有“剩余金额”属性的类都要进行修改,工作量是非常大的,而且还容易因疏漏而出现错误。图5-3所示的第二种实现方案使用了继承的思想来定义类,就能很好地解决第一种方法中出现的问题。它是仅在抽象的电话卡父类中定义剩余金额属性,其他类则从它那里继承。因此第二种方案相对于第一种方案来说,代码量要少若干倍。同时,当公共属性发生修改时,第二种方案只需要在父类中修改一次即可,不但维护的工作量大大减少,而且也避免了在第一种方案中可能出现的修改遗漏。 使用面向对象的这种继承关系也很符合人们的日常思维模式。电话卡分为无卡号、有卡号两大类,无卡号的电话卡可以具体分为磁卡、IC卡等,有卡号的电话卡可具体分为IP电话卡和200电话卡等。其中,电话卡这个抽象概念对应的电话卡类是所有其他类的父类,它是所有电话卡的公共属性的集合。这些公共属性包括卡中剩余金额等静态的属性,以及拨打电话、查询余额等动态的行为属性。将电话卡具体化、特殊化,就分别派生出两个子类:无卡号电话卡和有卡号电话卡。这两个子类一方面继承了父类电话卡的所有属性(包括属性与方法),即它们也拥有剩余金额、拨打电话、查询余额等属性和方法;另一方面它们又根据自己对原有的父类概念的明确和限定,专门定义了适用于本类特殊需要的特殊属性,如对于所有的有卡号电话卡,应该有卡号、密码等属性和登录交换机的行为,这些属性对无卡号电话卡是不适合的。从有卡号电话卡到IP电话卡和200电话卡的继承遵循完全相同的原则。使用继承的主要优点是,可使程序结构清晰,降低编码和维护的工作量。 在面向对象的继承特性中,还有一个关于单重继承和多重继承的概念。所谓单重继承,是指任何一个类都只有一个单一的父类;而多重继承是指一个类可以有一个以上的父类,它从多个父类中继承属性和方法。采用单重继承的程序结构比较简单,是单纯的树状结构,掌握、控制起来相对容易;而支持多重继承的程序,其结构则是复杂的网状,设计、实现都比较复杂。但现实世界中,事物之间的关系往往是复杂的网状结构,用多重继承描述起来比较自然。C++是支持多重继承的面向对象编程语言,而Java语言仅支持单重继承,但Java可以通过接口来间接实现多重继承。 5.1.2 继承的实现 1.继承的定义 Java中通过关键字extends来定义两个类之间的继承关系,extends后面的是父类,新定义的是子类。一般形式为: [类修饰符] class 子类名 extends 父类名 如果父类和子类不在同一个包中,则需要使用“import”语句来引入父类所在的包。 2.类成员的继承 继承能够使子类拥有父类的非私有属性和方法,而不需要在子类的类定义时重新定义父类的这些属性和方法。子类继承了父类属性,表示子类在被创建时另开辟新的空间来存储从父类继承而来的属性,其初始值应该是父类中该属性的初值。从这以后,父类属性与子类属性分别独立存放,互不干扰。对于父类的私有成员,子类不
您可能关注的文档
- Internet简明教程(第四版 作者 第03章 使用Internet Explorer浏览器浏览Internet内容.ppt
- Internet简明教程(第四版 作者 第04章 使用搜索引擎查询信息.ppt
- Internet简明教程(第四版 作者 第05章 电子邮件收发与管理.ppt
- Internet简明教程(第四版 作者 第10章 Internet的网络共享解决方案.ppt
- Internet简明教程(第五版) 作者 978-7-302-17512-4 01.ppt
- Internet简明教程(第五版) 作者 978-7-302-17512-4 03.ppt
- Internet简明教程(第五版) 作者 978-7-302-17512-4 06.ppt
- Internet简明教程(第五版) 作者 978-7-302-17512-4 07.ppt
- Internet简明教程(第五版) 作者 978-7-302-17512-4 08.ppt
- Internet简明教程(第五版) 作者 978-7-302-17512-4 09.ppt
- Java程序设计教程 作者 曾令明 1-6 第6章.ppt
- Java程序设计教程 作者 曾令明 7-11 第7章.ppt
- Java程序设计教程 作者 曾令明 7-11 第8章.ppt
- Java程序设计教程 作者 曾令明 7-11 第10章.ppt
- Java程序设计教程 作者 曾令明 7-11 第11章.ppt
- JAVA程序设计教程 作者 赵莉 第1-6章 第2章.ppt
- JAVA程序设计教程 作者 赵莉 第1-6章 第3章.ppt
- JAVA程序设计教程 作者 赵莉 第1-6章 第4章.ppt
- JAVA程序设计教程 作者 赵莉 第1-6章 第5章.ppt
- JAVA程序设计教程 作者 赵莉 第1-6章 第6章.ppt
文档评论(0)