0

我目前正在执行一项任务,我正在创建一个员工数据库。

我现在所处的位置是创建了一个抽象类 Employee。从那我有子类 HourlyEmployee、SalaryEmployee 和 CommissionEmployee。

对于我创建任何类型的新员工时的分配,它都需要存储在一个数组中。然后稍后我必须能够根据哪种类型列出员工。传递给 addEmployee() 的 ty int 来自我在另一个类中的 main 方法,其中菜单要求您为所需的员工类型选择 1-3。

public class EmployeeManager{

    private Employee[] employees;
    private final int employeeMax = 100;
    private int currentEmployees;


    public EmployeeManager()
    {
        employees = new Employee[employeeMax];
        currentEmployees = 0;

    }

    public void addEmployee(int ty, String fn, String ln, char mi, char gen, int empNum, boolean ft, double p)
    {

        if(ty == 1)
        {
            employees[currentEmployees] = new HourlyEmployee(fn, ln, mi, gen, empNum, ft, p);

            currentEmployees++;
        }
        else if(ty == 2)
        {
            employees[currentEmployees] = new SalaryEmployee(fn, ln, mi, gen, empNum, ft, p);

            currentEmployees++;
        }
        else if(ty == 3)
        {
            employees[currentEmployees] = new CommissionEmployee(fn, ln, mi, gen, empNum, ft, p);

            currentEmployees++;
        }
    }

现在这可以很好地将员工添加到数组中,但是它缺少的是一种识别它在数组中的员工类型的方法。稍后我必须实现将打印出所有类型为 Hourly、Salary 或 Commission 的员工的方法。如何识别数组中的员工,以便稍后打印该类型所有员工的列表?

public void listAll()
{
    if(currentEmployees == 0)
    {
        System.out.println("\nNo Employees.");
    }
    else
    {
        for (int i=0; i < employees.length; i++)
        {
            if(employees[i] != null)
            {
                System.out.print(employees[i]);
            }
        }
    }

}

这是我打印出任何类型的所有员工的方法。在每个类中,我都编写了一个 toString() 方法,该方法按照我需要的方式格式化输出。

4

2 回答 2

2

如果你真的需要知道对象的类型,你可以这样做:

if (employees[i] instanceof HourlyEmployee) {
// Hourly employee
}
于 2013-09-30T23:37:49.027 回答
0

这取决于您想要做什么,但如果您只是想用 打印出每个对象toString(),只需使用您当前的解决方案

if(employees[i] != null)
{
     System.out.print(employees[i]);
}

System.out.print()方法实际上调用object.toString()whereobject是您传递的参数。在这种情况下,由 引用的对象employees[i]toString()因此,您可以在每个Employee子类中实现一个方法。后期绑定和多态性将根据类型负责调用正确的方法。

于 2013-09-30T23:40:16.787 回答