- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验9 继承与多态(抽象类和接口)
实验9 继承与多态
一、实验目的
(1) 理解类的继承,掌握变量隐藏、方法覆盖的概念。
(2)理解引用类型的变量的赋值转换原则。
(3)理解多态概念,掌握方法的匹配调用原则; ?
(4)理解抽象类的使用;
(5)理解this和super的含义及使用。
(6)理解访问控制符的使用
二、 知识要点
1、继承的概念
通过类的继承,祖先类的所有成员均将成为子类拥有的“财富”。但是能否通过子类对象直接访问这些成员则取决于访问权限设置。Object类是所有类的祖先。
2、构造方法与继承关系
构造方法不存在继承关系,子类中是如何给父类继承的属性赋初值呢?
子类通过调用父类的构造方法给父类的属性赋值,在子类的构造方法的第1行可以通过super去调用父类的构造方法,如果没有super调用,则默认调用父类的无参构造方法。所以,在父类中编写构造方法通常均要提供无参构造方法。
3、对象引用变量赋值原则
可以将子类的对象引用赋值给父类引用变量,由于父类能操作访问属性和方法的子类已全部继承。但将父类引用变量的值赋给子类引用变量就受到限制,必须进行强制转换,编译总是认可强制转换,但运行程序时如果不能正确转换就会报错。
4、多态的两种表现形式
(1) 同一类中的方法多态(方法重载):同一类中允许多个同名方法,通过参数的数量、类型的差异进行区分。
(2) 子类对父类方法的重新定义(方法覆盖):方法名、返回值和参数形态完全一样。
(3) 方法调用的匹配原则。
首先查找有否有参数一致的方法,也就是精确匹配;如果没有,再检查实参是否能自动转换为形参类型,能转换也可以匹配调用,这种匹配称为转换匹配。
5、继承关系中对成员的访问(最近匹配原则)
??? 由于继承关系的存在,一个对象的属性和方法中有自己新定义的,也有从祖先类继承的。允许子类对父类定义的属性和方法重新定义,一个对象查找其属性和方法时按什么原则查找呢,实际也是“最近匹配原则”。
(1)在子类中访问属性和方法时将优先查找自己定义的属性和方法。如果该成员在本类存在,则使用本类的,否则,按照继承层次的顺序到其祖先类查找,如图8-1所示。
(2)this关键字特指本类的对象引用,使用this访问成员则首先在本类中查找,如果没有,则到父类逐层向上找。
(3)super特指访问父类的成员,使用super首先到直接父类查找匹配成员,如果未找到,再逐层向上到祖先类查找。
定义形式:
abstract class 类名称 {
??? 成员变量;
??? 方法(){……}???? //定义一般方法
??? abstract 方法();//定义抽象方法
}??
?? 在抽象类中可以包含一般方法和抽象方法。
?? 抽象类表示的是一个抽象概念,不能被实例化为对象。
?? 继承抽象类的具体类必须将抽象类中抽象方法覆盖实现。
7、接口
定义形式:
interface 名称 {
??? 静态常量;
??? 抽象方法()?? 接口中包含静态常量和抽象方法.
?? 类继承接口,实现接口中的所有方法.
三、上机练习
编写程序,在程序中定义一个抽象类Area、两个Area类的派生子类RectArea和RoundArea类,以及一个实现类ImpleArea类(main方法所在的类).程序的实现如下:
抽象类Area类中只包含一个抽象方法:double area()。
子类RoundArea类通过覆盖父类中的抽象方法area来求圆的面积,另一个类RectArea类通过覆盖父类中的抽象方法area求长方形的面积
圆的半径和长方形的边分别定义为子类RoundArea类和RectArea类的域,都为double类型。
ImpleArea类中接收键盘输入(Scanner),输入内容分别为长方形的边和圆的半径,求出长方形和圆的面积,并在屏幕上显示。
某公司有 3种不同的雇员,分为A,B,C3个级别。公司的总雇员数目因月份的不同可能发生变化。每个级别的月薪是不同的。编写一个程序计算公司一个月需要支付的全部薪水。
要求有一个abstract类,类名为Employee。Employee的子类有Aemployee, Bemployee, Cemployee. Employee类必须有一个abstract方法
注意:Aemployee, Bemployee, Cemployee声明的对象表示的是一个员工,而不是一类员工。成员变量没有要求的,不能乱加。
public abstract double earnings();//返回级别工资
子类必须重写父类的earnings方法(必须的,继承抽象类必须实现抽象方法),给出各自的月薪水的具体数额。 (数据随便,自己编好了)
编写一个Company类,该类用Employee数组作为成员,Employee数
您可能关注的文档
- 奈奎斯特定理与香农定理.doc
- 奋斗中的经典语录.doc
- 央视新闻推荐使用空气净化器产品.doc
- 奉化职称改革职称论文发表-火力发电厂无旁路烟气脱硫电气系统设计论文选题题目.docx
- 套筒补偿器的结构与优缺点.doc
- 奥数辅导资料三角形的四心.doc
- 女工程师:性冷淡风下的知性与内敛.docx
- 如东县代理发表职称论文发表-教学绘本论文选题题目.docx
- 如何了解你的竞争者--51109602284.docx
- 如何修改数码照片属性中的照相机信息.doc
- 2023咸阳职业技术学院招聘笔试真题参考答案详解.docx
- 2023四川化工职业技术学院招聘笔试真题及参考答案详解.docx
- 2023哈尔滨职业技术学院招聘笔试真题及参考答案详解.docx
- 2023商洛职业技术学院招聘笔试真题及答案详解1套.docx
- 2023呼伦贝尔职业技术学院招聘笔试真题参考答案详解.docx
- 2023南阳农业职业学院招聘笔试真题参考答案详解.docx
- 2023天津公安警官职业学院招聘笔试真题带答案详解.docx
- 2023年上海电机学院招聘笔试真题参考答案详解.docx
- 2023年四川艺术职业学院招聘笔试真题参考答案详解.docx
- 2023安徽体育运动职业技术学院招聘笔试真题及答案详解一套.docx
文档评论(0)