创建四个类,分别为Employee类、SalariedEmplyee类、HourlyEmployee类和CommissionEmployee类。其中Employee类是其他三个类的父类。Employee类包含姓名和身份证号。除此之外,SalariedEmployee类还应包含每月工资;HourlyEmployee类还应包含每小时工资数和工作时间数;CommissionEmployee还应包含提成比例和销售总额。每个类都应有合适的构造方法、数据成员的设置和读取方法。编写一个应用程序,创建这些类的对象,并输出与对象相关的信息。注意子类有时需调用父类的构造方法和被覆盖的方法,成员变量定义为private,对有些方法实现重载。
package priv.lhw.employee;
import java.util.Objects;
public class CommissionEmployee extends Employee{
/** 提成比例 */
private double commissionRatio;
/** 销售总额 */
private int totalSales;
/**
* 默认构造函数
*/
public CommissionEmployee(){
}
/**
* 带参构造函数
* @param name 姓名
* @param id 身份证号
* @param commissionRatio 提成比例
* @param totalSales 销售总额
*/
public CommissionEmployee(String name, String id, double commissionRatio, int totalSales){
super(name, id);
this.commissionRatio = commissionRatio;
this.totalSales = totalSales;
System.out.println("创建了一位销售员工! ");
}
/**
*
* @return 提成比例
*/
public double getCommissionRatio() {
return commissionRatio;
}
/**
*
* @return 销售总额
*/
public double getTotalSales() {
return totalSales;
}
/**
* 设置提成比例
* @param commissionRatio 提成比例
*/
public void setCommissionRatio(double commissionRatio) {
this.commissionRatio = commissionRatio;
}
/**
* 设置销售总额
* @param totalSales 销售总额
*/
public void setTotalSales(int totalSales) {
this.totalSales = totalSales;
}
@Override
public String toString() {
return "员工类型: 销售员工 \n" +
"姓名: " + super.getName() + '\n' +
"身份证号: " + super.getId() + '\n'+
"提成比例: " + commissionRatio * 100 + "%\n" +
"销售总额: " + totalSales + "\n";
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other == null || getClass() != other.getClass()) {
return false;
}
if (!super.equals(other)) {
return false;
}
CommissionEmployee that = (CommissionEmployee) other;
return Double.compare(that.commissionRatio, commissionRatio) == 0 &&
Double.compare(that.totalSales, totalSales) == 0;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), commissionRatio, totalSales);
}
}
package priv.lhw.employee;
import java.util.Objects;
abstract public class Employee {
/** 姓名 */
private String name;
/** 身份证号 */
private String id;
/**
* 默认构造函数
*/
public Employee(){
}
/**
* 带参构造函数
* @param name 姓名
* @param id 身份证号
*/
public Employee(String name, String id){
this.name = name;
this.id = id;
}
/**
*
* @return 身份证号
*/
public String getId() {
return id;
}
/**
*
* @return 姓名
*/
public String getName() {
return name;
}
/**
* 设置身份证号
* @param id 身份证号
*/
public void setId(String id) {
this.id = id;
}
/**
* 设置姓名
* @param name 姓名
*/
public void setName(String name) {
this.name = name;
}
@Override
abstract public String toString();
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other == null || getClass() != other.getClass()) {
return false;
}
Employee employee = (Employee) other;
return name.equals(employee.name) &&
id.equals(employee.id);
}
@Override
public int hashCode() {
return Objects.hash(name, id);
}
}
package priv.lhw.employee;
import java.util.Objects;
public class HourlyEmployee extends Employee{
/** 时薪 */
private double hourlyWage;
/** 工作时长 */
private double workingHours;
/**
* 默认构造函数
*/
public HourlyEmployee(){
}
/**
* 带参构造函数
* @param name 姓名
* @param id 身份证
* @param hourlySalary 时薪
* @param workingHours 工作时长
*/
public HourlyEmployee(String name, String id, double hourlySalary, double workingHours){
super(name, id);
this.hourlyWage = hourlySalary;
this.workingHours = workingHours;
System.out.println("创建了一位时薪员工! ");
}
/**
*
* @return 时薪
*/
public double getHourlySalary() {
return hourlyWage;
}
/**
*
* @return 工作时长
*/
public double getWorkingHours() {
return workingHours;
}
/**
* 设置时薪
* @param hourlySalary 时薪
*/
public void setHourlySalary(double hourlySalary) {
this.hourlyWage = hourlySalary;
}
/**
* 设置工作时长
* @param workingHours 工作时长
*/
public void setWorkingHours(double workingHours) {
this.workingHours = workingHours;
}
@Override
public String toString() {
return "员工类型: 时薪员工 \n" +
"姓名: " + super.getName() + '\n' +
"身份证号: " + super.getId() + '\n' +
"每小时工资数: " + hourlyWage + "\n" +
"工作时间数: " + workingHours + "\n";
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other == null || getClass() != other.getClass()) {
return false;
}
if (!super.equals(other)) {
return false;
}
HourlyEmployee that = (HourlyEmployee) other;
return Double.compare(that.hourlyWage, hourlyWage) == 0 &&
Double.compare(that.workingHours, workingHours) == 0;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), hourlyWage, workingHours);
}
}
package priv.lhw.employee;
public class Main {
public static void main(String[] args){
SalariedEmplyee salariedEmplyee = new SalariedEmplyee("李四", "222222222", 2345.6);
HourlyEmployee hourlyEmployee = new HourlyEmployee("王五", "333333333", 50, 10);
CommissionEmployee commissionEmployee = new CommissionEmployee("赵六", "444444444", 0.25, 10);
Employee[] employees = {salariedEmplyee, hourlyEmployee, commissionEmployee};
for (Employee e : employees){
System.out.println(e);
}
}
}
package priv.lhw.employee;
import java.util.Objects;
public class SalariedEmplyee extends Employee{
/** 月薪 */
private double monthlySalary;
/**
* 默认构造函数
*/
public SalariedEmplyee(){
}
/**
* 带参构造函数
* @param name 姓名
* @param id 身份证号
* @param monthlySalary 月薪
*/
public SalariedEmplyee(String name, String id, double monthlySalary){
super(name, id);
this.monthlySalary = monthlySalary;
System.out.println("创建了一位月薪员工! ");
}
/**
*
* @return 月薪
*/
public double getMonthlySalary() {
return monthlySalary;
}
/**
* 设置月薪
* @param monthlySalary 月薪
*/
public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
@Override
public String toString() {
return "员工类型: 月薪员工 \n" +
"姓名: " + super.getName() + '\n' +
"身份证号: " + super.getId() + '\n' +
"每月工资: " + monthlySalary + "\n";
}
@Override
public boolean equals(Object other) {
if (this == other) {
return true;
}
if (other == null || getClass() != other.getClass()) {
return false;
}
if (!super.equals(other)) {
return false;
}
SalariedEmplyee that = (SalariedEmplyee) other;
return Double.compare(that.monthlySalary, monthlySalary) == 0;
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), monthlySalary);
}
}