我得到的错误是在while循环中的fillPayroll()方法中,它表示payroll.add(employee)。错误说我不能在数组类型Person上调用add()但是Employee类继承自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");
}
}
}
答案 0 :(得分:7)
使用ArrayList
而不是使用数组。你会更开心。
创建后无法调整数组大小。所有用于管理的样板都由ArrayList
完成。在元素中使用具有子类的数组也有其他问题(围绕协方差)。可能你唯一需要改变的是:
private final List<Person> payroll = new ArrayList<Person>();
List
有一个add()
方法。数组没有。
答案 1 :(得分:4)
如果出于某种原因你不能使用收藏品。你想转:
payroll.add(employee);
in to:
this.add(employee);
答案 2 :(得分:3)
payroll是一个数组。您正在调用数组上的方法。这是不可能的。
答案 3 :(得分:-1)
由于工资单是一个数组,所以需要
payroll[index].add(employee);
答案 4 :(得分:-1)
如果B类延伸A:
a a = new B();
但不是:
B b = new A();