如何覆盖方法

问题描述:

class TestTax { 
    public static void main (String[] args){ 
     NJTax t = new NJTax(); 

     t.grossIncome= 50000; 
     t.dependents= 2; 
     t.state= "NJ"; 

     double yourTax = t.calcTax(); 
     double totalTax = t.adjustForStudents(yourTax); 

     System.out.println("Your tax is " + yourTax); 
    } 
} 

    class tax { 
    double grossIncome; 
    String state; 
    int dependents; 

    public double calcTax(){ 
     double stateTax = 0; 
     if(grossIncome < 30000){ 
      stateTax = grossIncome * 0.05; 
     } 
     else{ 
      stateTax = grossIncome * 0.06; 
     } 
     return stateTax; 
    } 

    public void printAnnualTaxReturn(){ 
     // code goes here 
    } 
} 



    public class NJTax extends tax{ 
    double adjustForStudents (double stateTax){ 
    double adjustedTax = stateTax - 500; 
    return adjustedTax; 

     public double calcTax(){ 

     } 

    } 
} 

我有课要求的麻烦: “在NJTax覆盖其更改calcTax()的功能calcTax(新版本)应该由$ 500降低税收在返回价值之前。“如何覆盖方法

这是如何完成的。我只有safaribooksonline,没有解决方案的视频。

+0

下面的基本解决方案是好的,但有一件事你应该记住: 公共双calcTax(){ 回报super.calcTax() - 500; } – idungotnosn 2011-06-14 00:39:55

http://download.oracle.com/javase/tutorial/java/IandI/override.html

NJTax是错误的,只要语法去。类名也应以大写字母开头。由于我不完全确定你想要什么功能,这里只是一个例子。超级是指父级,在这种情况下是tax。因此,NJTax的calcTax()方法返回tax.calcTax() - 500。您也可以考虑使用@Override注释作为清除方法被覆盖并提供编译时检查的方式。

public class NJTax extends tax { 

    public double adjustForStudents (double stateTax) { 
     double adjustedTax = stateTax - 500; 
     return adjustedTax; 
    } 

    public double calcTax() { 
     return super.calcTax() - 500; 
    } 

} 
+0

+1,用于包含'@ Override'注释。出于某种原因,其他人忽略了这个...... :) – mre 2011-06-10 13:40:36

+0

这个解决方案很好,但有一点小问题。如果收入低于20,000,NJTax calcTax方法将返回负数。 – idungotnosn 2011-06-14 00:47:42

提示:返回与tax.calcTax()相同的值减去500美元。

public class NJTax extends tax{ 

    double adjustForStudents (double stateTax){ 
     double adjustedTax = stateTax - 500; 
     return adjustedTax; 
    } 

    public double calcTax(){ 
     double stateTax = super.calcTax(); 
     return this.adjustforStudents(stateTax); 
    } 

} 

为了覆盖calcTax的基类(Tax)实现,只需在NJTax中添加自己的calcTax实现即可。这可能是那样简单

public double calcTax(){ 
    return super.calcTax() -500; 
}