Java基础--封装--继承 某公司的雇员分为以下若干类:Employee:这是所有员工总的父类。 SalariedEmployee:Employee的子类

题目:

某公司的雇员分为以下若干类:

  1. Employee:这是所有员工总的父类,属性:员工的姓名,员工的生日月份。
    方法:getSalary(int month) 根据参数月份来确定工资,如果该月员工过生日,则公司会额外奖励100元。
  2. SalariedEmployee:Employee的子类,拿固定工资的员工。属性:月薪。
  3. HourlyEmployee:Employee的子类,按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。属性:每小时的工资、每月工作的小时数。
  4. SalesEmployee:Employee的子类,销售人员,工资由月销售额和提成率决定。属性:月销售额、提成率。
  5. BasedPlusSalesEmployee:SalesEmployee的子类,有固定底薪的销售人员,
    工资由底薪加上销售提成部分。
    属性:底薪。

每个不同的员工类的重写父类的计算工资的方法 ,获取到正确的工资。

分析:
Employee为父类,所有员工类都继承该类,重写计算工资的方法getSalary(int month)。

更新:
父类Employee中判断生日月增加工资的方法可以在子类中重写时调用,利用super。增加代码复用性。

所有员工总的父类,Employee:

public class Employee {
   
	private String name; // 员工姓名
	private int month; // 员工生日月

	public String getName() {
   
		return name;
	}
	public void setName(String name) {
   
		this.name = name;
	}
	public int getMonth() {
   
		return month;
	}
	public void setMonth(int month) {
   
		this.month = month;
	}

	// 获取工资方法
	public double getSalary(int month) {
   
		Date date = new Date();
		int m = date.getMonth() + 1;
		if (month == m) {
   
			return 100;
		} else {
   
			return 0;
		}
	}
}

拿固定工资的员工类,SalariedEmployee:

public class SalariedEmployee extends Employee {
   
	private double monSalary; // 月薪

	public double getMonSalary() {
   
		return monSalary;
	}

	public void setMonSalary(double monSalary) {
   
		this.monSalary = monSalary;
	}

	// 重写获取工资方法,
	public double getSalary(int month) {
   
		return monSalary + super.getSalary(month);
	}
}

按小时拿工资的员工,每月工作超出160小时的部分按照1.5倍工资发放。 HourlyEmployee:

public class HourlyEmployee extends Employee {
   
	private double hourMoney; // 每小时的工资、
	private double hours; // 每月工作的小时数

	public double getHourMoney() {
   
		return hourMoney;
	}
	public void setHourMoney(double hourMoney) {
   
		this.hourMoney = hourMoney;
	}
	public double getHours() {
   
		return hours;
	}
	public void setHours(double hours) {
   
		this.hours = hours;
	}

	// 重写计算工资的方法
	public double getSalary(int month) {
   
		double salary = 0;
		if (hours > 160) {
   
			salary = (160 + (hours - 160) * 1.5) * hourMoney;
		} else {
   
			salary = hours * hourMoney;
		}
		return salary + super.getSalary(month);
	}
}

销售人员,工资由月销售额和提成率决定。SalesEmployee:

public class SalesEmployee extends Employee {
   
	private double saleCount; // 月销售额、
	private double royaltyRate; // 提成率

	public double getSaleCount() {
   
		return saleCount;
	}
	public void setSaleCount(double saleCount) {
   
		this.saleCount = saleCount;
	}
	public double getRoyaltyRate() {
   
		return royaltyRate;
	}
	public void setRoyaltyRate(double royaltyRate) {
   
		this.royaltyRate = royaltyRate;
	}

	// 计算工资方法重载
	public double getSalary(int month) {
   
		return saleCount * royaltyRate + super.getSalary(month);
	}
}

有固定底薪的销售人员,工资由底薪加上销售提成部分。BasedPlusSalesEmployee:

public class BasedPlusSalesEmployee extends SalesEmployee {
   
	private double baseSalary; // 底薪

	public double getBaseSalary() {
   
		return baseSalary;
	}
	public void setBaseSalary(double baseSalary) {
   
		this.baseSalary = baseSalary;
	}

	// 计算工资方法重载
	public double getSalary(int month) {
   
		return baseSalary + super.getSalary(month);
	}
}

测试类:

public class Test {
   
	public static void main(String[] args) {
   

		System.out.println("==== SalariedEmployee 拿固定工资的员工 ====");
		SalariedEmployee e1 = new SalariedEmployee();
		e1.setName("曹操"); // 设置员工姓名
		e1.setMonth(8); // 设置生日是8月
		e1.setMonSalary(8999); // 设置工资是8999
		System.out.println(e1.getName() + "的生日为:" + e1.getMonth() + " 月");
		System.out.println("平时月工资为:" + e1.getSalary(7));
		System.out.println("生日月工资为:" + e1.getSalary(8));

		System.out.println("\n==== HourlyEmployee 按小时拿工资的员工 ====");
		HourlyEmployee e2 = new HourlyEmployee();
		e2.setName("孙权"); // 设置员工姓名
		e2.setMonth(8); // 设置生日是8月
		e2.setHours(161); // 设置工作事件
		e2.setHourMoney(10); // 设置每小时工资
		System.out.println(e2.getName() + "的生日为:" + e2.getMonth() + " 月");
		System.out.println("平时月工资为:" + e2.getSalary(7));
		System.out.println("生日月工资为:" + e2.getSalary(8));
		System.out.println(
				"工作时间为:" + e2.getHours() + "小时\t每小时工资为:" + e2.getHourMoney());

		System.out.println("\n===SalesEmployee销售人员,工资由月销售额和提成率决定====");
		SalesEmployee e3 = new SalesEmployee();
		e3.setName("赵云"); // 设置员工姓名
		e3.setMonth(8); // 设置生日是8月
		e3.setSaleCount(58000); // 设置月销售额
		e3.setRoyaltyRate(0.19);// 设置提成率
		System.out.println(e3.getName() + "的生日为:" + e3.getMonth() + " 月");
		System.out.println("平时月工资为:" + e3.getSalary(7));
		System.out.println("生日月工资为:" + e3.getSalary(8));
		System.out.println(
				"销售额:" + e3.getSaleCount() + "\t提成率:" + e3.getRoyaltyRate());

		System.out.println("\n===BasedPlusSalesEmployee 有固定底薪的销售人员====");
		BasedPlusSalesEmployee e4 = new BasedPlusSalesEmployee();
		e4.setName("张飞"); // 设置员工姓名
		e4.setMonth(8); // 设置生日是8月
		e4.setBaseSalary(4000); // 设置底薪
		e4.setSaleCount(38000); // 设置月销售额
		e4.setRoyaltyRate(0.15);// 设置提成率
		System.out.println(e4.getName() + "的生日为:" + e4.getMonth() + " 月");
		System.out.println("平时月工资为:" + e4.getSalary(7));
		System.out.println("生日月工资为:" + e4.getSalary(8));
		System.out.println("工资 = " + e4.getBaseSalary() + " + "
				+ e4.getSaleCount() + " * " + e4.getRoyaltyRate());
	}
}

运行结果:

每天进步一点点!

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务