我不确定标题是否正确,但基本上我有这段代码:
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;
HoursWorked
和HourlyWage
用于计算我的ProvincialTax类中使用的AnnualGrossSalary
。使用我的for循环,我正在尝试计算ArrEmployee
内每个对象的省税,但它一直要求我使方法calculateTax()
静态,但是它应该覆盖抽象方法?
如何绕过这个?
答案 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,这样可以让人们更轻松地阅读您的代码并让您阅读其他代码