加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:54:43 所属栏目:Java 来源:网络整理
导读:我正在创建一个员工工资制度.我有一个抽象的Employee类. WageEmployee和Manager扩展了Employee.然后Programmer和SalesPerson扩展了WageEmployee. 我的问题是我想创建一个SalesManager. SalesManger通过增加佣金和工资来计算他们的工资.所以他们有SalesPerson
我正在创建一个员工工资制度.我有一个抽象的Employee类. WageEmployee和Manager扩展了Employee.然后Programmer和SalesPerson扩展了WageEmployee.

我的问题是我想创建一个SalesManager. SalesManger通过增加佣金和工资来计算他们的工资.所以他们有SalesPerson和Manager类型.

我应该创建一个界面以及SalesPerson应该扩展什么?

从Manager中扩展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!"); }

}

解决方法

叫我疯了,但你可能不需要子类来处理这里的不同付费方式.相反,考虑使用 Strategy pattern来计算工资/销售佣金.这样,你有一个类Employee及其子类SalesEmployee;这些中的每一个都具有PayStrategy对象的属性,该对象可以具有WagePayStrategy和CommissionPayStrategy的具体子类.如果您在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);
    }
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读