第11章 继承和多态 2012.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第11章 继承和多态 2012

Java面向对象语言 主讲人:王晓辉 Tel:633429 Email: xiaohui_w@yahoo.cn 第11章 继承和多态 介绍 面向对象编程允许从已有的类派生出新类,这叫继承(Inheritance)。 继承是软件代码重用的一种机制,是一种在面向对象编程中非常重要的,而且强大的特性。 假设已经定义了一个圆形,矩形和三角形的模型类,这些类有许多相同的特征,如何设计才能避免冗余,而且还能使系统易于理解和维护?答案就是使用继承。 11.2 超类和子类 不同的类可能包含一些相同的,公共的特性和行为,把这些相同的东西组合在一起形成一个新的公共类来被其他类共享。 继承就是定义一个一般类,然后扩展这个一般类形成更多的特殊类。这些特殊类继承了一般类的某些属性和操作。 这些类的对象我们可以称为几何对象,那么就创建一个称为几何类的一般类,这个一般类包含几何元素中的一些公共的属性和操作,如可以填充元素,修改线条的颜色,或撤销填充等。因此一般类GeometricObject可以作为所有几何对象的一般类模型。 如图一般类的UML图,以及特殊类之间的关系图。 在Java术语中,一个类C1是从C2扩展来的,那么C1类称为子类,C2类称为父类或超类。子类继承父类可访问的数据和方法,同时可以扩展出自己的新的数据和方法如上图所示。代码如下。 思考一下,如下定义的构造方法是否正确?为什么? 答案是否定的,原因就是子类不能访问父类的私有的数据,但可以通过调用父类的get或set方法来访问它。 关于继承的几点注意: 子类不是超类的一个子集,实际上子类包含父类,并对其进行了扩展,内容比父类更丰富。 父类中私有的数据不能被它之外的任意类访问。因此,它们不能在子类中被直接使用。但是,如果在父类中定义了setter或getter,可以通过使用它们来访问这些数据。 并不是所有的is-a的关系都是继承关系,例如,一个方形是一个矩形,但却不能使用方向矩形来扩展方向,因为没有什么可扩展的。但却可以从几何类中进行扩展定义方形类。因为新的子类要比父类包含更多的详细信息。 继承被用来模型化is-a的关系。不要盲目的为了重用方法而扩展类。例如,没必要把一个树类扩展为人类,尽管二者具有很多相同的属性,比如高度和重量。子类和父类之间必须存在is-a的关系。 很多其他的编程如c++允许一个子类可以从几个父类扩展和继承,称多重继承,但Java不允许多重继承,即严格的单继承。即一个类的声明中只能有一个关键字extends,而且后面只有一个类名。如果想要拥有若干个类的特性,可以实现接口(在14章讲授)。 11.3 supper关键字 子类继承了父类可访问的数据和方法,它是否继承构造方法呢?父类的构造方法可以在子类中被调用吗?在前面一章中,介绍过一个关键字this,表示对象自己。Super关键字则指它的父类,有2种方式被使用。 调用父类构造方法。 调用父类的其他方法 11.3.1 调用父类构造方法 调用父类的构造方法的格式如下: 其中super()调用父类无参数的构造方法,super(argument)调用父类和参数argument匹配的构造方法。 但需注意的是,不管是使用哪条语句,调用父类的构造方法语句必须放在子类定义的构造方法之前,并且只能显示的调用父类的构造方法。如图下列语句是正确的。 父类的构造方法必须使用super关键字调用。构造方法被用来创建类的实例,不像属性和方法,父类的构造方法是不能继承的,只能使用super通过在子类中调用父类的构造方法。 11.3.2 构造链 构造方法可以调用重载的构造方法,或其父类的构造方法。如果二者都没显式调用,编译器会自动在子类构造方法前添加super(),如下图所示。 在任何情况下,利用构造方法创建一个类的实例时,会沿着它的继承链向上所有的父类的构造方法都要被调用。 当构造一个子类对象时,子类构造方法先调用父类的构造方法,然后才能履行自己的其他任务。 如果这个父类又是由另外一个类派生的,那么它父类的构造方法在调用前,先要调用它祖父的构造方法,如此,直到最终没有父亲的类的构造方法被调用,然后返回。 这条构造方法的执行和返回的过程称构造链,如下代码。 如果一个类设计成被继承的类,即一般类,那么最好在类中提供无参数的构造方法来避免编程中的错误。如下代码所示。 因为在Apple类中没有显式的定义,那么Apples的默认的无参数的构造方法会被添加上。既然Apple是Fruit的子类,那么在调用构造方法的时候,会先调用父类的构造方法,但Fruit没定义无参数的构造方法,系统不会为Fruit添加,因此这个程序不会被编译,会产生语法错误。因此如果有可能,为了避免出错,在定义任何一个类时,最好提供无参数的构造方法。

文档评论(0)

me54545 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档