实验5 继承与接口(二)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验5、继承与接口(二)
一、实验目的
1.子类的继承性
2.深入理解类的继承的基本概念及实现。
3.了解Object及对Object类的主要方法equals进行重写。
4.掌握super关键字的作用。
5.掌握抽象类与接口的基本概念及实际应用
6.掌握对象多态性的作用。
7.掌握接口的基本概念及实际应用。
8.掌握接口回调的概念及运行机制。
二、实验内容及步骤
1、重写Object类的equals方法
任务一:使用继承自Object类的equals方法进行Person对象的比较操作。
(1)源代码如下:
class Person{
private String name;
private int age;
public Person(String name,int age){
= name;
this.age = age;
}
//getter与setter方法略。
public String toString(){
return “姓名:”++”;年龄:”+this.age;
}
}
public class PersonDemo{
public static void main(String args[]){
Person person1 = new Person(“李兴华”,30);
Person person2 = new Person(“李兴华”,30);
System.out.println(person1.equals(person2)?”是同一个人。”
:”不是同一个人。”);
}
}
(2)编译并运行应用程序。
(3)实验报告
将运行结果写在实验报告中。
思考:应用程序中person1对象调用的equals方法是从哪个类继承的,请查看源代码,说明此equals方法的作用,即比较的内容。
任务二:修改上述源代码Person类,使PersonDemo应用程序执行结果为“同一个人”。
2、对象的上转型对象
任务一:对象的上转型对象接收任意子类类型的对象
(1)使用Object接收一切的引用类型对象。
源代码:
class A{
public String getInfo(){
return “Hello World!!!”;
}
}
public class ADemo{
public static void main(String args[]){
Object obj = new A();
System.out.println(obj.getInfo());
System.out.println(obj.toString());
A a = (A)obj;
System.out.println(a.getInfo());
System.out.println(a.toString());
}
}
(2)编译并运行程序。
(3)实验报告
将运行结果写在实验报告中。
如果程序编译为通过,或运行时有错误提示,请说明原因,并将错误改正。任务二:上转型实现多态性
(1)实例学习
不使用上转型对象实现多态性源代码如下:
使用上转型对象实现多态性:
(2)阅读上述两个源代码,深刻理解使用上转型对象实现多态性机制。
编译并运行第二个程序。
(3)实验报告
将运行结果写在实验报告中。
3、抽象类与上转型对象练习
任务一:通过对上述实验内容的实践与学习,根据要求填写代码。
(1)要求:
✧有一个abstract类,类名为Employee;
✧该类有一个abstract方法:
public abstract double earnings( );;
✧Employee的子类有YearWorker、MontthWorker和WeekWorker。
YearWorker对象按年领取薪水,MonthWorker按月领取薪水,WeekWorker 按周领取薪水。
✧子类必须实现父类的earnings()方法,返回各自领取薪水数。
✧有一个Company类,该类用employee数组作为成员,employee数组的
单元可以是YearWorker对象的上转型对象、MonthWorker对象的上转型对象或WeekWorker对象的上转型对象。
✧程序能输出Company对象一年需要支付的薪水总额。
(2)代码模板
按模板要求,将代码1-4替换为java程序代码。
abstract class Employee
{
public abstract double earnings( );
}
class YearWorker extends Employee
{
【代码1】// 实现earnings( )方法
}
class MonthWorker extends Employee
{
【代码2】// 实现earnings( )方法
}
class WeekWorker extends Employee
{
【代码3】// 实现earnings( )方法
}
class Company
{
Employee[ ] employee;
double salaries=0;
Company(Employee[ ] employee)
{
this.employee=employee;
}
public double salariesPay( )
{
salaries=0;
【代码4】// 计算salaries
return salaries;
}
}
public class HardWork
{
public static void main(String args[ ])
{
Employee[ ] employee=new Employee[20];
for(int i=0;i { if(i%3==0) employee[i]=new WeekWorker( ); else if(i%3==1) employee[i]=new MonthWorker( );