ch继承和多态说课.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * 第7章 继承和多态 7.1.1 为什么需要继承 先看个例子:假如我们要开发一个复杂的文字处理软件,类似Word,其中含有很多对话框,这些对话框的出现,都需要编写代码。那么总代码量就会很大。而实际每个对话框都有宽度和高度,都有背景颜色,都有标题,都可以显示,都可以关闭……等这些共同功能,我们可以将这些对话框共同的功能写在一个类中,让每个对话框都来“继承”这个类中的功能。 这种策略叫做继承(Inheritance)。继承,是面向对象的重要特征。 在Java中,被继承的类叫做父类、基类或者超类,与之对应的叫做子类或者派生类。继承是通过extends(继承)关键字实现的,格式如下: class 子类 extends 父类{} 7.1 使用继承 7.1.2 如何实现继承 显然,两个对话框都有标题和显示功能,因此,首先将两个类共同的部分写成一个类:Dialog。代码为: 注意:如果一个成员是private的,不能在类的外部使用,当然也不能被子类使用。一般,成员变量定义为protected类型,成员函数定义为public类型。 7.1 使用继承 7.1.2 如何实现继承 接下来编写字体对话框类FontDialog,继承Dialog类: 表面看,该类只定义了一个成员变量fontName,实际上,还从父类继承了title,可以当成自己的变量一般使用,从“this.title = title;”就可以看出来。 7.1 使用继承 7.1.2 如何实现继承 我们用一个主函数来进行测试,代码为: 运行,控制台上打印: 7.1 使用继承 7.1.2 如何实现继承 注意: 1. Java不支持多重继承,一个子类只能有一个父类,不允许出现如下情况: class 子类 extends 父类1,父类2 {} 2. 但是,Java中可以有多层继承,比如A继承了B,B又继承了C。此时相当于A间接继承了C。 7.1 使用继承 7.1.3 继承的底层本质 实际上,从本质上讲,子类继承父类之后,实例化子类对象的时候,系统会首先实例化父类对象。 只要实例化子类对象,系统就会自动先实例化一个父类对象与之对应,当然此时调用的是父类没有参数的构造函数。 此时就出现了一个问题:父类构造函数万一有参数呢?此时,系统就必须要求在实例化父类对象时,传入参数,否则报错。看例子: 7.1 使用继承 7.1.3 继承的底层本质 系统在子类构造函数处报错: 其原因是,父类没有不带参数的构造函数。解决该问题,有两种方法: 1. 给父类增加一个不带参数的空构造函数。 2. 在子类的构造函数中,第一句用super来给父类构造函数传参数。 ?注意 “super(title);”必须写在子类构造函数的第一句,传入的参数必须和父类构造函数中参数列表类型匹配。 7.1 使用继承 7.2.1 什么是成员覆盖 在子类继承父类时,如果出现子类成员和父类成员定义相同的情况,会有什么现象发生呢?(值得一提的是,我们一般讨论的是成员函数的定义相同,成员变量的定义相同,一般很少使用)。 子类中成员函数的定义和父类相同,指名称相同,参数列表相同、返回类型相同。 看下面的代码: 7.2 成员的覆盖 7.2.1 什么是成员覆盖 在父类和子类中都有函数show(),子类对象调用“fd.show();”,调用的是子类中的show,函数父类中的show呢?运行,控制台上打印: 可见,如果子类中的函数定义和父类相同,最后调用时是调用子类中的方法。这叫做覆盖或者重写(Override)。 7.2 成员的覆盖 7.2.2 成员覆盖有何作用 从前面可以看出,成员覆盖好像是不小心引起的,实际不然。成员覆盖有着很大的作用。其最大的作用是:在不改变源代码的情况下,能够对一个模块的功能进行改造。 比如,我们从网上下载了一个类,该类专门负责图像处理操作,包含三个功能: 7.2 成员的覆盖 7.2.2 成员覆盖有何作用 由于该类不是为我们量身定做的,因此,功能可能无法完全满足需要。假如我们在使用时,并不是从硬件读取图像,而是从文件读取图像,因此,需要改变read函数功能;而对于handle函数,我们希望图像去噪声之后还能进行锐化;功能3不变。我们就可以充分通过覆盖来帮我们完成: 7.2 成员的覆盖 7.3.1 什么是多态 多态(Polymorphism),也是面向对象的基本特征之一,也是软件工程的重要思想。 ?注意:前面讲解的函数重载也是一种多态,称为静态多态,本章讲解的多态,特指

文档评论(0)

舞林宝贝 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档