实验二 类的继承与多态
[实验目的]
1、
构造类的继承体系
2、
抽象类与多态
3、
类的静态成员使用
4、
重载与重写
[实验内容]
1、
(必作)利用多态性实现的简单工资单系统。基类:Employee,其派生类是:销售员类:CommissionWorker,他的收入是一小部分基本工资加上销售额的一定的百分比;计件工类:PieceworkWorker,他的收入取决他生产的工件数量;小时工类HourlyWorker:他的收入以小时计算。若超过40小时部分的报酬是平时的1.5倍。阅读后面所附代码,并补全以下代码中每个子类的的相关方法。采用硬编码方式(即不需要输入,直接用常量为参数建对象)对每一个类建立一个实例,放于Employee数组中,依次打印其工资。
2、
(必作)现规定销售员类的提成率输入必须进行检验,只能是0-1之间的一个数。否则不予接受并提示错误。按要求重构相应的方法。
3、
(选作)银行账户管理:定义一个基类
Acount
表示所有的账户。以此为基础派生出活期账户类(
Saving
)、定期账户类(
FixSaving
)、信用卡账户类(
Checking
)。每种账户均需提供存(
deposit
)和取(
withdrawal
)两种方法。根据下面要求设计相应的类,并提供测试主程序。
(1)
信用卡是储蓄类的一种,假设它可以在
5000
元范围内透支,它有一个用户密码,取款时,必须验证密码。定义一个信用卡类(从
Acount
帐户类中继承),然后实现取款和存款业务。
(2)
定期储蓄是储蓄的一种,假定定期分为一年期、三年期、五年期,利率分别为
5%
,
8%
和
10%
。用户在办理定期存款帐户时,必须确定其定期时段,中途不再在同一帐号上办理存款业务。取款是一次性完成,若提前取款,则全部金额的利息按活期利率
1%
计算。
(3)
活期储蓄在整个存续期内可自由存取,只要余额不为
0
,账户不会被销户。
注:题
3
进行适当扩展(如输入和数据库支持),并提供相应的图形界面可作为课程设计。
附
Employee
类代码:
//
职员类
public
abstract
class Employee {
public Employee(String name){this.name=name;}; //constructor
public
abstract
double getPay(); //getPay
public String getName(){return name;}
private String name;
//
以下类既是内部类,又是派生类。既避免一个包中类过多,也避免与其它包中的类同名。
//
钟点工
public
static
class HourlyWorker extends Employee{
public HourlyWorker(String name,double wages,double hours){
super(name);
}
public
double getPay(){…… //calculate and return salary
private
double wages; //wage per hour
private
double hours; //hours worked for week
};
//
销售员
public
static
class CommissionWorker extends Employee {
public CommissionWorker(String name,double salary,double commission,double quantity){ super(name);}
public
double getPay(){...}
public
void setSalary(double salary){
this.salary=salary;
}
//
按题
2
的要求,本方法需要重构
public
void setCommission(double commision){
this.commission=commision;
}
public
void setSellValue(double value){
this.sellValue=value;
}
double salary; //
底薪
double commission; //
提成率
double sellValue; //
销售额
}
//
计件工
public
static
class PieceWorker extends Employee {
public PieceWorker(String name,double commission,double quantity){ super(name);}
public
double
getPay(){……}
public
void setWage(double wage){……}
public
void setQuantity(int quantity){……}
private
double wage; //
每件报酬
private
int
quantity; //
件数
;
}
}
实验报告要求:附上的代码要体现自己设计的部分,其余部分可打省略号。选作题不要求所有同学都作。不要求写在实验报告上。但从学习的角度,建议多加练习。若有完成者,也可将源代码打包并发送至电子邮箱
hong_yao@126.com
可获加分参考。