簡體   English   中英

從超類到子類執行抽象方法

[英]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.Floatjava.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM