- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验三 多态性
一 实验目的
1.理解类的继承的概念。
2.理解引用类型的变量的赋值转换原则。
3.理解多态概念,掌握方法的匹配调用原则。?
4.理解抽象类与接口的使用。
5.理解this和super的含义。
6.理解访问控制符的使用
二 知识要点
1.继承的概念
Object类是所有类的父类。
通过类的继承,父类的所有成员均将成为子类拥有的“财富”。但是能否通过子类对象直接访问这些成员则取决于访问权限设置。
2. 构造方法与继承关系
构造方法不存在继承关系。
子类通过调用父类的构造方法给父类的属性赋值。
在子类的构造方法的第1行可以通过super去调用父类的构造方法。如果没有super调用,则默认调用父类的无参构造方法。所以,在父类中编写构造方法通常均要提供无参构造方法。
3. 对象引用变量赋值原则
可以将子类的对象引用赋值给父类引用变量。
但将父类引用变量的值赋给子类引用变量时,必须进行强制转换。但运行程序时如果不能正确转换就会报错。
4. 多态性
(1) 同一类中的方法多态(方法重载):同一类中允许多个同名方法,通过参数的数量、类型的差异进行区分。
(2) 子类对父类方法的重新定义(方法重写):方法名、返回值和参数形态完全一致。
(3) 方法调用的匹配原则:
首先查找是否有参数一致的方法,也就是精确匹配;如果没有,再检查实参是否能自动转换为形参类型,能转换也可以匹配调用,这种匹配称为转换匹配。
(4) 动态绑定机制:
动态绑定是一种调用对象方法的机制。在运行期间采用动态绑定意味着,虚拟机将调用对象实际类型所对应的方法。
5. 继承关系中对成员的访问
由于继承关系的存在,一个对象的属性和方法中有自己新定义的,也有从父类继承的。子类能够对父类的属性和方法重新定义。
一个对象查找其属性和方法时遵循 “最近匹配原则”。
(1)在子类中访问属性和方法时将优先查找自己定义的属性和方法。如果该成员在本类存在,则使用本类的,否则,按照继承层次的顺序到其父类查找。
(2)this关键字特指本类对象引用。使用this访问成员则首先在本类中查找,如果没有,则到父类逐层向上找。
(3)super关键字特指访问父类对象的引用。使用super首先到直接父类查找匹配成员,如果未找到,再逐层向上到父类查找。
6.抽象类
(1)定义形式:
abstract class 类名称 {
??? 成员变量;
??? 方法(){……}???? //定义一般方法
??? abstract 方法();//定义抽象方法
}??
()()? () ???? 接口只包括常量定义和抽象方法。
???? 接口具有继承性,一个接口还可以继承多个父接口,父接口间用逗号分隔。
?? 接口中所有属性的修饰符默认为 public static final,即静态常量。
?? 接口中所有方法的修饰符号默认为 public abstract,即抽象方法
(2)接口实现(implements)
接口定义了一套行为规范,一个类实现这个接口就要遵守接口中定义的规范,实际上就是要实现接口中定义的所有方法。
????????? 一个类可以实现多个接口;
????????? 类中实现接口的方法要加public修饰,因为接口中定义的抽象方法默认为public。
三 实验内容
多态在工资系统中的应用。给出一个根据雇员类型利用多态性完成工资单计算的程序定义一个类Employee作为每星期发给他固定工资,而不计工作时间)、PieceWorker(按其生产的产品数发放工资)、HourlyWorker(根据工作时间长短发放工资)。earnings(),该方法没有实质性的工作;而在每个子类中都提供了恰当的earnings()方法的重写。
为了计算雇员的工资,main方法中仅使用雇员对象的一个超类引导并调用earings()方法
【模板一】
//Employee超类的定义
class Employee {
private String name;
public Employee(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return name;
}
public double earnings() {
return 0.0;
}
}
//定义Boss类,为Employee的子类
class Boss extends Employee {
//【代码一】定义Boss
您可能关注的文档
- 大学图书管理系统测试计划书_附件.doc
- 第二章 HIBC、UCC EAN-128条形码编码知识介绍.pdf
- 第二篇 配件管理程序.doc
- 第八章 毕业设计思路.doc
- 变量柱塞泵的维护及故障处理.pdf
- 第二章 Java编程规范_V1.3.doc
- 个人博客需求分析(含流程图、ER图、存储过程)_附件.doc
- 第9讲 微机原理习题库.pdf
- 数据库高级应用技术08-(数据库调优)概论.ppt
- 网络工程师考试冲刺(习题及解答).doc
- 难点详解鲁教版(五四制)6年级数学下册期末测试卷带答案详解(考试直接用).docx
- 难点详解鲁教版(五四制)6年级数学下册期末试题【培优】附答案详解.docx
- 难点解析鲁教版(五四制)7年级数学下册期末试题及完整答案详解(全国通用).docx
- 难点解析鲁教版(五四制)7年级数学下册期末试题含完整答案详解(名师系列).docx
- 难点解析鲁教版(五四制)7年级数学下册期末试题含完整答案详解【全国通用】.docx
- 难点解析鲁教版(五四制)7年级数学下册期末试卷(突破训练)附答案详解.docx
- 难点解析鲁教版(五四制)7年级数学下册期末试卷(能力提升)附答案详解.docx
- 难点详解京改版数学9年级上册期中试卷附参考答案详解【突破训练】.docx
- 难点解析鲁教版(五四制)7年级数学下册期末试题含完整答案详解(有一套).docx
- 难点解析鲁教版(五四制)7年级数学下册期末试卷带答案详解(夺分金卷).docx
文档评论(0)