覆盖继承的方法 Class
Overriding Method from Inherited Class
在下面的代码中,我重写了 "hourly employee" class 这个继承自的 "pay" 方法。 super.pay 的计算公式是工资率 * 工作时数。对于这个销售员 class,工资中有佣金是根据添加到销售员 object 的销售额添加到工资中的。但是,当我对销售员 driver class 调用 pay 方法时,即使我添加了工作时间和销售额,它也没有添加佣金。我已附上以下代码:
package sales;
public class JuniorSalesman extends Hourly {
protected double commission;
private double totalSales;
public JuniorSalesman(String eName, String eAddress, String ePhone, String socSecNumber, double rate, double commission) {
super(eName, eAddress, ePhone, socSecNumber, rate);
totalSales = 0;
}
public void addSales(double sales)
{
totalSales += sales;
}
public double pay()
{
double payment = super.pay() + (totalSales * commission);
totalSales = 0;
return payment;
}
public String toString()
{
String result = super.toString();
result += "\nTotal Sales: " + totalSales;
return result;
}
}
只是一个想法,但为了清楚起见,您可能想将 totalSales = 0
重构为单独的 resetSales()
方法。
看看你的构造函数:
protected double commission;
private double totalSales;
public JuniorSalesman(..., double commission) {
super(...);
totalSales = 0;
}
我没有看到任何等同于:
this.commission = commission;
因此 commission
的值可能始终是 0.0
的默认双精度值,导致 pay()
将付款计算为:
double payment = super.pay() + (totalSales * 0.0);
这可能是导致您的付款看起来好像佣金无效的原因。
在下面的代码中,我重写了 "hourly employee" class 这个继承自的 "pay" 方法。 super.pay 的计算公式是工资率 * 工作时数。对于这个销售员 class,工资中有佣金是根据添加到销售员 object 的销售额添加到工资中的。但是,当我对销售员 driver class 调用 pay 方法时,即使我添加了工作时间和销售额,它也没有添加佣金。我已附上以下代码:
package sales;
public class JuniorSalesman extends Hourly {
protected double commission;
private double totalSales;
public JuniorSalesman(String eName, String eAddress, String ePhone, String socSecNumber, double rate, double commission) {
super(eName, eAddress, ePhone, socSecNumber, rate);
totalSales = 0;
}
public void addSales(double sales)
{
totalSales += sales;
}
public double pay()
{
double payment = super.pay() + (totalSales * commission);
totalSales = 0;
return payment;
}
public String toString()
{
String result = super.toString();
result += "\nTotal Sales: " + totalSales;
return result;
}
}
只是一个想法,但为了清楚起见,您可能想将 totalSales = 0
重构为单独的 resetSales()
方法。
看看你的构造函数:
protected double commission;
private double totalSales;
public JuniorSalesman(..., double commission) {
super(...);
totalSales = 0;
}
我没有看到任何等同于:
this.commission = commission;
因此 commission
的值可能始终是 0.0
的默认双精度值,导致 pay()
将付款计算为:
double payment = super.pay() + (totalSales * 0.0);
这可能是导致您的付款看起来好像佣金无效的原因。