Java,多重继承.我该怎么做?

6 java inheritance design-patterns multiple-inheritance

我正在创建一个员工工资制度.我有一个抽象的Employee课.WageEmployeeManager扩展Employee.然后程序员并SalesPerson扩展WageEmployee.

我的问题是我要创建一个SalesManager.在SalesManger具有thier工资加佣金和工资计算.所以他们有类型SalesPersonManager.

我应该创建一个接口以及应该SalesPerson扩展什么?

SalesManager从管理器扩展,然后创建SalesPerson一个接口是很自然的.但我不能因为它继承自WageEmployee......

我如何让它工作.正常吗?

abstract class Employee 
{
  String name;

  Employee() {}
  Employee (String nm) { name = nm; }
  abstract double computePay();
  void display () {}
  void setHours(double hrs) {}
  void setSales(double sales) {}
  void setSalary(double salary) { System.out.println("NO!"); }
Run Code Online (Sandbox Code Playgroud)

}

Tim*_*Tim 10

叫我疯了,但你可能不需要子类来处理这里的不同付费方式.相反,请考虑使用策略模式来计算工资/销售佣金.这样,你就有了一个类Employee及其子类SalesEmployee; 每个都有一个属性作为一个PayStrategy对象,它可以有具体的子类WagePayStrategyCommissionPayStrategy.如果您定义了正确的方法PayStrategy(可以是接口或抽象类),您可以让您的Employee实例向策略对象询问员工为某些输入(工作小时数,销售额等)获得的报酬.

考虑以下简单的例子:

interface PayStrategy {
    public float getPay(float hoursWorked, float salesMade);
}

class WageStrategy implements PayStrategy {
    public float getPay(float hoursWorked, float salesMade) {
        return hoursWorked * 8.5;
    }
}

class CommissionStrategy implements PayStrategy {
    public float getPay(float hoursWorked, float salesMade) {
        return salesMade * 0.5 + hoursWorked * 5.0;
    }
}

abstract class Employee {
    public PayStrategy payStrategy; // assign as needed

    public float getPay(float hoursWorked, float salesMade) {
        return this.payStrategy.getPay(hoursWorked, salesMade);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意如何在不需要其他类的情况下更改任何给定员工的薪酬策略,从而为您提供更多的灵活性和围绕该算法的封装.