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

时间:2010-03-25 15:34:51

标签: java arrays inheritance

我得到的错误是在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");
        }

    }

}

5 个答案:

答案 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();