我目前正致力于创建员工数据库的任务。
我现在在哪里,是否创建了一个抽象类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()方法,它按照我需要的方式格式化输出。
答案 0 :(得分:2)
如果你真的需要知道对象的类型,你可以这样做:
if (employees[i] instanceof HourlyEmployee) {
// Hourly employee
}
答案 1 :(得分:0)
这取决于您想要做什么,但如果您只是想用toString()
打印每个对象,只需使用您当前的解决方案
if(employees[i] != null)
{
System.out.print(employees[i]);
}
System.out.print()
方法实际调用object.toString()
,其中object
是您传递的参数。在这种情况下,employees[i]
引用的对象。因此,您可以在每个toString()
子类中实现Employee
方法。 Late-binding和polymorphism会根据类型调用正确的方法。