设计一个Worker类,有以下方法: (1)构造方法:带两个输入参数:工人的姓名和小时工资。 (2)小时工资的get/set方法 (3)pay()方法:带一个工作时长输入参数,输出:"Not Implemented"。 接下来设计Worker的子类:HourlyWorker和SalariedWorker。两个子类都重写继承的方法pay()来计算工人的周薪。计时工按实际工时支付每小时工资,超过40小时的超出部分为双倍工资。计薪工人的工资是40小时的工资,不管工作时间是多少。因为与工作时长无关,故SalariedWorker的方法pay()可以不带参数调用。
时间: 2024-03-11 20:50:16 浏览: 71
好的,下面是一个实现你所描述的Worker类及其子类HourlyWorker和SalariedWorker的示例代码:
```java
class Worker {
private String name;
private double hourlyWage;
public Worker(String name, double hourlyWage) {
this.name = name;
this.hourlyWage = hourlyWage;
}
public double getHourlyWage() {
return hourlyWage;
}
public void setHourlyWage(double hourlyWage) {
this.hourlyWage = hourlyWage;
}
public void pay(int hours) {
System.out.println("Not Implemented");
}
}
class HourlyWorker extends Worker {
public HourlyWorker(String name, double hourlyWage) {
super(name, hourlyWage);
}
public void pay(int hours) {
double salary;
if (hours <= 40) {
salary = hours * getHourlyWage();
} else {
salary = 40 * getHourlyWage() + (hours - 40) * getHourlyWage() * 2;
}
System.out.println(getName() + "'s weekly salary is $" + salary);
}
}
class SalariedWorker extends Worker {
public SalariedWorker(String name, double hourlyWage) {
super(name, hourlyWage);
}
public void pay() {
double salary = 40 * getHourlyWage();
System.out.println(getName() + "'s weekly salary is $" + salary);
}
}
public class Test {
public static void main(String[] args) {
HourlyWorker worker1 = new HourlyWorker("Tom", 10.0);
worker1.pay(35);
HourlyWorker worker2 = new HourlyWorker("Jerry", 12.0);
worker2.pay(50);
SalariedWorker worker3 = new SalariedWorker("Bob", 8.0);
worker3.pay();
}
}
```
在这个示例代码中,Worker类是基类,包含了name和hourlyWage两个数据成员,以及一个构造函数和一个pay()方法。HourlyWorker类是Worker类的派生类,重写了pay()方法来计算工人的周薪。SalariedWorker类同样是Worker类的派生类,但由于它的工资与工作时长无关,因此重写的pay()方法可以不带参数调用。在Test类中,我们创建了三个Worker对象,分别是HourlyWorker和SalariedWorker类型的,调用它们的pay()方法来计算工人的周薪。