gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:53:32 25 4
gpt4 key购买 nike

我正在创建一个员工工资系统。我有一个抽象的 Employee 类。 WageEmployeeManager 扩展 Employee。然后 Programmer 和 SalesPerson 扩展 WageEmployee

我的问题是我想创建一个 SalesManagerSalesManger 通过添加佣金和薪水来计算他们的报酬。所以他们有类型 SalesPersonManager

我应该创建一个接口(interface)什么?SalesPerson 应该扩展什么?

很自然地从经理扩展 SalesManager,然后使 SalesPerson 成为一个接口(interface)。但我不能,因为它继承自 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 对象作为属性,该对象可以有具体的子类 WagePayStrategyCommissionPayStrategy。如果您在 PayStrategy 上定义了正确的方法(可以是接口(interface)或抽象类),您可以让您的 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);
}
}

请注意如何在不需要不同类别的情况下更改任何给定员工的薪酬策略,从而为您提供更大的灵 active 和围绕该算法的封装。

关于Java,多重继承。我应该怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11462208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com