java语学习后续3.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
java语学习后续3

第5章 继承与多态 5.1 继承 5.2 Java的继承 5.3 多态 5.4 Java的重载 5.5 构造函数的继承与重载 5.6 包 5.7 接口 5.8 小结 习题 本章讨论面向对象程序设计的另外两个重要特点:继承和多态。继承是面向对象程序设计方法中的一种重要手段,通过继承可以更有效地组织程序结构,明确类间关系,并充分利用已有的类来完成更复杂、深入的开发。多态则可以提高类的抽象度和封闭性,统一一个或多个相关类对外的接口。本章最后还将讨论接口和包。 5.1 继承 在面向对象技术的各个特点中,继承是最具有特色,也是与传统方法最不相同的一个。继承实际上是存在于面向对象程序中的两个类之间的一种关系。当一个类获取另一个类中所有非私有的数据和操作的定义作为自己的部分或全部成分时,就称这两个类之间具有继承关系。被继承的类称为父类或超类,继承了父类或超类的所有数据和操作的类称为子类。 一个父类可以同时拥有多个子类,这时这个父类实际上是所有子类的公共域和公共方法的集合,而每一个子类则是父类的特殊化,是对公共域和方法在功能、内涵方面的扩展和延伸。现仍以电话卡为例,图5.1列举了各种电话卡类的层次结构、域和方法。 图 5.1 各种电话卡类及其间的继承关系 从图5.1可以看出,面向对象的继承关系很符合人们的日常思维模式。电话卡分为无卡号、有卡号两大类,无卡号的电话卡可以细分为磁卡、IC卡等,有卡号的电话卡可分为IP电话卡和200电话卡等。其中,电话卡这个抽象概念对应的电话卡类是所有其他类的父类,它是所有电话卡的公共属性的集合。这些公共属性包括卡中剩余金额等静态的数据属性,以及拨打电话、查询余额等动态的行为属性。将电话卡具体化、特殊化,就分别派生出两个子类:无卡号电话卡和有卡号电话卡。 这两个子类一方面继承了父类电话卡的所有属性(包括域与方法),即它们也拥有剩余金额、拨打电话、查询余额等数据和操作,另一方面它们又根据自己对原有的父类概念的明确和限定,专门定义了适用于本类特殊需要的特殊属性,如,对于所有的有卡号电话卡,应该有卡号、密码、接入号码等域和登录交换机的行为,这些属性对无卡号电话卡是不适合的。从有卡号电话卡到IP电话卡和200电话卡的继承遵循完全相同的原则。 使用继承的主要优点,是使得程序结构清晰,降低编码和维护的工作量。仍以图5.1为例。剩余金额是所有电话卡共有的属性,第一种实现方案是为每一个电话卡类中都定义自己的剩余金额域;第二种实现方案是仅在抽象的电话卡父类中定义剩余金额域,其他类则从它那里继承。因此第一种方案相对于第二种方案,代码量要多出若干倍。同时,当公共属性发生修改时,第一种方案需要在每个类中做相应的修改,而第二种方案只需要在父类中修改一次即可,不但维护的工作量大大减少,而且也避免了在第一种方案中可能出现的修改遗漏。 在面向对象的继承特性中,还有一个关于单重继承和多重继承的概念。所谓单重继承,是指任何一个类都只有一个单一的父类;而多重继承是指一个类可以有一个以上的父类,它的静态的数据属性和操作从所有这些父类中继承。采用单重继承的程序结构比较简单,如图5.1所示的是单纯的树状结构,掌握、控制起来相对容易;而支持多重继承的程序,其结构则是复杂的网状,设计、实现都比较复杂。但是现实世界的实际问题,它们的内部结构多为复杂的网状,用多重继承的程序模拟起来比较自然,而单重继承的程序要解决这些问题,则需要其他的一些辅助措施。C++是开发人员熟悉的支持多重继承的面向对象的编程语言,而本书中介绍的Java语言,出于安全、可靠性的考虑,仅支持单重继承。 综上所述,在面向对象的程序设计中,采用继承的机制来组织、设计系统中的类,可以提高程序的抽象程度,使之更接近于人类的思维方式,同时也可以提高程序开发效率,降低维护的工作量。 5.2 Java的继承 5.2.1 派生子类 Java中的继承是通过extends关键字来实现的,在定义类时使用extends关键字指明新定义类的父类,就在两个类之间建立了继承关系。新定义的类称为子类,它可以从父类那里继承所有非private的属性和方法作为自己的成员。 例 5-1 实现图5.1中电话卡类的继承结构。 1: abstract class PhoneCard 2: { 3: double balance; 4: 5: abstract boolean performDial( ); 6: double getBalance( ) 7: { 8: return balance; 9: } 10: } 11: abstract class None-Num

文档评论(0)

书是爱的奉献 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档