2015-10-14 288 views
-2

我需要從超類繼承實例方法,但我卡住了。方法繼承和調用

public class Pay 

private float hours; 
private float rate; 
private int hrsStr; 
float gross; 
double tax; 

public void calc_Payroll() 
{ 
    if (hrsStr != 0) 
     gross = hrsStr + ((hours - hrsStr) * 1.33f) * rate; 
    else 
     gross = hours * rate; 
} 

public void tax(double a) 
    { 
    if (gross <= 399.99) 
       tax = .92; 
       else 
        if (gross <= 899.99) 
         tax = .88; 
        else 
         tax = .84; 
    } 

這是超階級的一部分,我需要有相同的方法簽名(???)的以及調用稅(雙A)和calc_payroll()

這是我有什麼對於子類,但它不起作用。

public class Payroll extends Pay 
{ 
float net; 
void calc_payroll() 
    {    
    float finaltax = (float) tax; 
    net = gross * finaltax; 

    } 

} 
+0

@Override不一定是必需的,但建議使用。真正的問題是你沒有相同的可訪問性或拼寫的方法,你試圖重寫。 (* public *,* calc_Payroll * with capital * P *) – DoubleDouble

+0

@JawadLeWywadi,如果簽名是相同的,則不會覆蓋該方法; @Override註釋不是魔術修復。也就是說,這是一個很好的做法。問題是子類的方法是A)與超級類不同,並且B)降低了超級方法對包級別的可見性。它必須聲明爲'公共無效calc_Payroll' – Tgsmith61591

+1

這只是一個評論傢伙,但謝謝。 – 2015-10-14 20:54:55

回答

2

您的子類中的無效calc_payroll()不會覆蓋或調用超類方法。

如果您想要覆蓋基類中的方法,則方法簽名必須相同。爲了清晰起見,請使用@override註釋。

如果你的新方法具有不同的簽名,那麼你可以使用調用父類方法....

void calc_payroll() 
{ 
    super.calc_Payroll(...); 
} 

取決於你在新的方法中需要什麼樣的行爲,如果你想調用超類方法中的行爲。

+0

我想要做的是使用calc_payroll來計算子類中的淨工資。所以我希望它調用tax方法和calc_payroll方法來計算和返回淨支付 – Kiotzu

+1

參數的目的是什麼float a,float b,int c,float d?他們似乎沒有被使用, – MikeJ

+0

我剛剛意識到,我不需要這些參數,因爲它們來自私有實例變量。 – Kiotzu