我的Java代码出错,但我看不出它有什么问题。 救命?

我得到的错误是在while循环中的fillPayroll()方法中,它表示payroll.add(employee)。 错误说我不能在数组类型Person上调用add()但是Employee类inheritance自Person,所以我认为这是可能的。 谁能为我澄清一下这个?

import java.io.*; import java.util.*; public class Payroll { private int monthlyPay, tax; private Person [] payroll = new Person [1]; //Method adds person to payroll array public void add(Person person) { if(payroll[0] == null) //If array is empty, fill first element with person { payroll[payroll.length-1] = person; } else //Creates copy of payroll with new person added { Person [] newPayroll = new Person [payroll.length+1]; for(int i = 0;i<payroll.length;i++) { newPayroll[i] = payroll[i]; } newPayroll[newPayroll.length] = person; payroll = newPayroll; } } public void fillPayroll() { try { FileReader fromEmployee = new FileReader ("EmployeeData.txt"); Scanner data = new Scanner(fromEmployee); Employee employee = new Employee(); while (data.hasNextLine()) { employee.readData(data.nextLine()); payroll.add(employee); } } catch (FileNotFoundException e) { System.out.println("Error: File Not Found"); } } } 

而不是使用数组使用ArrayList 。 你会更开心。

创建后无法调整数组大小。 用于管理的所有样板都由ArrayList完成。 在元素中使用带子类的数组也有其他问题(围绕协方差)。 可能你需要改变的唯一一条线是:

 private final List payroll = new ArrayList(); 

List有一个add()方法。 数组没有。

如果由于某种原因你不能使用集合。 你想转:

 payroll.add(employee); 

进入:

 this.add(employee); 

工资单是一个数组。 您正在调用数组上的方法。 这是不可能的。

由于工资单是一个数组,它需要

 payroll[index].add(employee); 

如果B类扩展A:

A =新B();

但不是:

B b = new A();