我的Java代码中有一个错误,但我看不出有什么问题。帮助

我的Java代码中有一个错误,但我看不出有什么问题。帮助,java,arrays,inheritance,Java,Arrays,Inheritance,我得到的错误是while循环中的fillPayroll方法,其中显示payroll.addemployee。错误表示我无法在数组类型Person上调用add,但Employee类继承自Person,因此我认为这是可能的。有人能帮我澄清一下吗 import java.io.*; import java.util.*; public class Payroll { private int monthlyPay, tax; private Person [] payroll =

我得到的错误是while循环中的fillPayroll方法,其中显示payroll.addemployee。错误表示我无法在数组类型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");
        }

    }

}

由于payroll是一个数组,因此需要

payroll[index].add(employee);

由于payroll是一个数组,因此需要

payroll[index].add(employee);

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

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

使用ArrayList代替数组。你会更快乐的

数组一旦创建就无法调整大小。所有用于管理的样板文件都由ArrayList完成。在元素中使用带有子类的数组也存在协方差方面的其他问题。可能您需要更改的唯一行是:

private final List<Person> payroll = new ArrayList<Person>();

列表有一个add方法。数组不会。请使用ArrayList,而不是使用数组。你会更快乐的

数组一旦创建就无法调整大小。所有用于管理的样板文件都由ArrayList完成。在元素中使用带有子类的数组也存在协方差方面的其他问题。可能您需要更改的唯一行是:

private final List<Person> payroll = new ArrayList<Person>();

列表有一个add方法。数组不会。如果B类扩展了A:

A=新的B

但不是:

B=新的A


如果B类扩展了A:

A=新的B

但不是:

B=新的A


如果出于任何原因,您不能使用集合。您要转到:

payroll.add(employee);
关于:

this.add(employee);

如果出于任何原因,您不能使用集合。您要转到:

payroll.add(employee);
关于:

this.add(employee);

看看我!我一直在使用ArrayList,我很高兴!它真的有效!如果你没有单轨思维,你可能需要用向量来代替才能真正快乐。看看我!我一直在使用ArrayList,我很高兴!它真的有效!如果你没有单轨思维,你可能需要使用向量来获得真正的快乐。不,那么你将为一个人添加一名员工。这绝对不是真的!:S payroll[index]返回个人实例。。。然后您将在那个Person实例上调用add方法!他想要的是在Persons集合中添加一个新的Person实例。同意,他的设计很糟糕。工资单需要是列表工资单,而不是人员[]工资单;不,那么您将向一个人添加一名员工。这绝对不是真的!:S payroll[index]返回个人实例。。。然后您将在那个Person实例上调用add方法!他想要的是在Persons集合中添加一个新的Person实例。同意,他的设计很糟糕。工资单需要是列表工资单,而不是人员[]工资单;如果雇员扩展了Person,则雇员就是Person。因此,人员ed=新员工很好。若雇员扩展了人,那个么雇员就是人。因此,人员ed=新员工很好。你把它倒过来了。