ch07继承和多态
* * * * * * * * * * * * * * * * * * * * * * * * * * * * 第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),也是面向对象的基本特征之一,也是软件工程的重要思想。 ?注意:前面讲解的函数重载也是一种多态,称为静态多态,本章讲解的多态,特指
您可能关注的文档
- 3.1家住平原上课.ppt
- 3.unit 4, Book 5人教版.ppt
- 3.3竞争与合作粤教版.ppt
- 3.6.1我们的中华文化.ppt
- 3.创业机会与创业风险.pptx
- 3.几百几十加、减几百几十(笔算).ppt
- 3.教师的职(专)业素养.ppt
- 3.6.1 美洲——美国.ppt
- 3.6认识星空.pptx
- 3.档案利用与服务.ppt
- 广东省广州省实验中学教育集团2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州大学附属中学2025-2026学年八年级上学期奥班期中物理试题(解析版).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(含答案).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第八十六中学2025-2026学年八年级上学期期中物理试题(解析版).docx
- 广东省广州市第八十九中学2025-2026学年八年级上学期期中考试物理试题(含答案).docx
- 广东省广州市第二中学2025-2026学年八年级上学期期中考试物理试题(解析版).docx
- 2026《中国人寿上海分公司营销员培训体系优化研究》18000字.docx
- 《生物探究性实验教学》中小学教师资格模拟试题.docx
原创力文档

文档评论(0)