有一个Worker类,有以下属性和方法:
(1)姓名String name和小时工资double rate
(2)构造方法:带两个输入参数:工人的姓名和小时工资。
(3)小时工资的get/set方法
(4)double pay(int hour)
Worker类和主类代码已经给出,你需要设计Worker的子类:HourlyWorker和SalariedWorker。
两个子类都重写继承的方法pay(int hour)来计算工人的周薪:
HourlyWorker计时工按实际工时支付每小时工资,超过40小时的加班费为双倍工资。
SalariedWorker计薪工人的工资是40小时的工资,不管工作时间是多少。因为与工作时长无关,故SalariedWorker有方法pay(int hour)和无参pay(),无参pay() 也是按40个小时的工资计算。
裁判测试程序:
import java.util.Scanner;
class Worker {
private String name;//姓名
private double rate;//小时工资
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getRate() {
return rate;
}
public void setRate(double rate) {
this.rate = rate;
}
public Worker(String name,double rate) {
this.name=name;
this.rate=rate;
}
public double pay(int hour) {
return 0;
}
}
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Worker w1 = new Worker(input.next(),input.nextDouble());
System.out.println(w1.pay(input.nextInt()));
SalariedWorker w2 = new SalariedWorker(input.next(),input.nextDouble());
System.out.println(w2.pay());
System.out.println(w2.pay(input.nextInt()));
HourlyWorker w3 = new HourlyWorker(input.next(), input.nextDouble());
int h=input.nextInt();
System.out.println(w3.pay(h));
w3.setRate(h+10);
System.out.println(w3.pay(h));
}
}
/* 请在这里填写答案 编写HourlyWorker和SalariedWorker类*/
输入样例:
在这里给出一组输入。例如:
joe 15 35
Sue 14.5 60
dana 20 25
输出样例:
在这里给出相应的输出。例如:
0.0
580.0
580.0
500.0
875.0
下面是答案代码:
class HourlyWorker extends Worker{
public double pay(int hour){
if(hour<=40)
return getRate()*hour;
else
return getRate()*40+2*getRate()*(hour-40);
}
public HourlyWorker(String name,double rate){
super(name,rate); //使用父类的方法
}
}
class SalariedWorker extends Worker{
public double pay(int hour){
return getRate()*40;
}
public double pay(){
return getRate()*40;
}
public SalariedWorker(String name,double rate){
super(name,rate); //使用父类的方法
}
}