6-2 设计Worker类及其子类 (20分)

6-2 设计Worker类及其子类 (20分)

设计一个Worker类,有以下方法:
(1)构造方法:带两个输入参数:工人的姓名和小时工资。
(2)小时工资的get/set方法
(3)pay()方法:带一个工作时长输入参数,输出:“Not Implemented”。
接下来设计Worker的子类:HourlyWorker和SalariedWorker。两个子类都重写继承的方法pay()来计算工人的周薪。计时工按实际工时支付每小时工资,超过40小时的加班费为双倍工资。计薪工人的工资是40小时的工资,不管工作时间是多少。因为与工作时长无关,故SalariedWorker的方法pay()可以不带参数调用。

类框架定义:

设计的类如下框架所示,完成后将该三类提交。
class Worker {
	……
}

class HourlyWorker extends Worker {
		……
}
class SalariedWorker extends Worker {
		……
}

裁判测试程序样例:

import  java.util.Scanner;

//Main测试类
public class Main{
  public static void main(String[] args) {
      Scanner input = new Scanner(System.in);
      Worker w1 = new Worker("Joe",15);
      w1.pay(35);
      SalariedWorker w2 = new SalariedWorker("Sue",14.5);
      w2.pay();
      w2.pay(60);
      HourlyWorker w3 = new HourlyWorker("Dana", 20);
      w3.pay(25);
      w3.setRate(35);
      w3.pay(25);     
  }
}

/* 请在这里填写答案 */

输入样例:
在这里给出一组输入。例如:

 25

输出样例:
在这里给出相应的输出。例如:

Not Implemented
580.0
580.0
500.0
875.0

解决:

class Worker {
	private String Name;
	private double Rate;
	public Worker(String _Name,double _Rate){
		Name = _Name;
		Rate = _Rate;
	}
	void setName(String _name) {
		Name = _name;
	}
	double getRate(){
		return Rate;
	}
	void setRate(double	_Rate){
		Rate = _Rate;
	}
	void pay(int time){
		System.out.println("Not Implemented");
	}
}

class HourlyWorker extends Worker {
	public HourlyWorker(String string, double d) {
		super(string ,d);
	}

	void pay(int time){
		if(time > 40)
			System.out.println(this.getRate()*time*2);
		else
			System.out.println(this.getRate()*time);
	}
}
class SalariedWorker extends Worker {
	public SalariedWorker(String string, double d) {
		super(string ,d);
	}
	void pay(){
		System.out.println(this.getRate()*40);
	}
	void pay(int time){
		System.out.println(this.getRate()*40);
	}
}
  • 10
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
Worker一个抽象,其中包含了姓名、工龄、工资三个属性,以及计算工资的抽象方法calculateSalary()。 其子类可以根据不同的职业特点进行设计,例如: 1. Programmer:继承自Worker,重写calculateSalary()方法,根据工龄计算薪资。 2. Salesman:继承自Worker,重写calculateSalary()方法,根据销售业绩计算薪资。 3. Manager:继承自Worker,重写calculateSalary()方法,根据固定薪资和奖金计算总薪资。 示例代码如下: ``` public abstract class Worker { private String name; private int yearsOfWorking; private double salary; public Worker(String name, int yearsOfWorking, double salary) { this.name = name; this.yearsOfWorking = yearsOfWorking; this.salary = salary; } public String getName() { return name; } public int getYearsOfWorking() { return yearsOfWorking; } public double getSalary() { return salary; } public abstract double calculateSalary(); } public class Programmer extends Worker { public Programmer(String name, int yearsOfWorking, double salary) { super(name, yearsOfWorking, salary); } @Override public double calculateSalary() { return getSalary() * (1 + 0.1 * getYearsOfWorking()); } } public class Salesman extends Worker { private double sales; public Salesman(String name, int yearsOfWorking, double salary, double sales) { super(name, yearsOfWorking, salary); this.sales = sales; } public double getSales() { return sales; } public void setSales(double sales) { this.sales = sales; } @Override public double calculateSalary() { return getSalary() + 0.2 * getSales(); } } public class Manager extends Worker { private double bonus; public Manager(String name, int yearsOfWorking, double salary, double bonus) { super(name, yearsOfWorking, salary); this.bonus = bonus; } public double getBonus() { return bonus; } public void setBonus(double bonus) { this.bonus = bonus; } @Override public double calculateSalary() { return getSalary() + getBonus(); } } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Solidare

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值