我正在查看一些旧的考试试卷,我已经找到了其中一个考试,要求你编写一个系统,其中超类是抽象的,并扩展到2个子类
abstract public class Employee {
private String name;
private String id;
public Employee (String name,String id){
this.name = name;
this.id = id;
}
public abstract float calculateMonthlyPay();
public String getName(){
return this.name;
}
public String getID(){
return this.id;
}
@Override
public String toString(){
return getID()+" "+getName()+" "+calculateMonthlyPay();
}
}
超类Employee中的所有代码都没问题但文章要求您扩展到子类PartTimeEmp,每月Pay方法是从Float更改为Double 当这样做时,java当然会给出错误,因为它说double与float不兼容我似乎无法找到使这项工作的方法
public class PartTimeEmp extends Employee {
private double hourlyRate;
private int hoursPerWeek;
public PartTimeEmp(String name, String id) {
super(name, id);
}
@Override
public double calculateMonthlyPay() {
return 0;
}
}
这实际上可以成功吗?任何帮助表示赞赏
谢谢,
克里斯
答案 0 :(得分:3)
您可以使用java.lang.Number
作为抽象方法的返回类型。
然后,您可以在重写方法中返回新的java.lang.Float
或java.lang.Double
,因为这些类型会扩展Number
。
这种技术称为covariant return type,可以从Java 5开始。
这要求你不要使用原语(没有层次结构),而是使用Number
包装器。
请注意,对于与货币相关的精确计算,建议使用java.math.BigDecimal
而不是float
s,double
或其包装 - 至少在内部使用方法和类实例的逻辑。
答案 1 :(得分:0)
您还可以使用类型转换技术,而不会产生任何开销,例如:
double x = (double) calculateMonthlyPay()
;