[英]Exetending abstract method from superclass to sub class
我正在查看一些舊的考試試卷以進行oop考試我已經提出其中一個要求你編寫一個系統,其中超類是抽象的,並擴展到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不兼容隨着浮動我似乎無法找到一種方法來使這項工作
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;
}
}
這真的能成功嗎? 任何幫助表示贊賞
謝謝,
克里斯
您可以使用java.lang.Number
作為抽象方法的返回類型。
然后你可以在重寫方法中返回一個新的java.lang.Float
或java.lang.Double
,因為這些類型擴展了Number
。
這種技術稱為協變返回類型 ,可以從Java 5開始。
這要求您不要使用原語(沒有層次結構),而是使用它們的Number
包裝器。
請注意,對於精確的與貨幣相關的計算,建議使用java.math.BigDecimal
,而不是float
s, double
s或它們的包裝器 - 至少在內部使用方法和類實例的邏輯。
您還可以使用類型轉換技術,而不會產生任何開銷,例如:
double x = (double) calculateMonthlyPay()
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.