一种在java中被强制为静态的抽象方法

时间:2015-03-20 03:20:30

标签: java class

我不确定标题是否正确,但基本上我有这段代码:

for(int i = 0; i < ArrEmployee.size(); ++i){
        ArrEmployee.get(i);
        double provTax = ProvincialTax.calculateTax(ArrEmployee.get(i));

这个arrayList:

    List<Employee> ArrEmployee = new ArrayList<>(); //  array for employee objects

ProvincialTax课程是这样的:

public class ProvincialTax extends Deductions { // deductions is an abstract class with the abstract method calculateTax()

public double calculateTax(Employee employee) {

    if (employee.getAnnualGrossSalary() < 41495){
        return employee.getAnnualGrossSalary()*0.16;
    }
    else if (employee.getAnnualGrossSalary() < 82985){
        return employee.getAnnualGrossSalary()*0.20;
    }
    else if(employee.getAnnualGrossSalary() < 100970){
        return employee.getAnnualGrossSalary()*0.24;
    }
    else
        return employee.getAnnualGrossSalary()*0.2575;

}

}

所以基本上我的arrayList ArrEmployee存储了具有变量的Employee对象:

     public long EmployeeNumber;
     public String EmployeeName;
     public String LastName;
     public double HoursWorked;
     public double HourlyWage;

HoursWorkedHourlyWage用于计算我的ProvincialTax类中使用的AnnualGrossSalary。使用我的for循环,我正在尝试计算ArrEmployee内每个对象的省税,但它一直要求我使方法calculateTax()静态,但是它应该覆盖抽象方法?

如何绕过这个?

2 个答案:

答案 0 :(得分:2)

问题不在于你应该使你的方法是静态的,问题是你正在调用这个方法,好像它是静态的,你不应该这样做做。问题在于:

double provTax = ProvincialTax.calculateTax(ArrEmployee.get(i));

您想要调用哪个ProvincialTax实例?在那个实例上调用它。

ProvincialTax taxInstance = ...; // Get an instanceof of ProvincialTax
double provTax = taxInstance.calculateTax(ArrEmployee.get(i));

答案 1 :(得分:2)

如果没有进一步的证据以及您没有使用首选命名约定这一事实,ProvincialTax.calculateTax似乎试图通过calculateTax ProvincialTax来调用Class而不是它的一个例子......

ProvincialTax provincialTax = new ProvincialTax();
for(int i = 0; i < ArrEmployee.size(); ++i){
    double provTax = provincialTax.calculateTax(ArrEmployee.get(i));
}

您可能希望阅读Code Conventions for the Java TM Programming Language,这样可以让人们更轻松地阅读您的代码并让您阅读其他代码