如何使用数组和多态?

时间:2012-02-07 22:35:48

标签: java arrays sorting methods polymorphism

好的,假设我有一个抽象的Employee类,3个继承自

的类
Employee(Commission, Salary, and Hourly)

员工包括

name
employeeNumber
gender

及其下的内容包括getHourlyWagegetSalary等内容。然后我有一个带有菜单的驱动程序类,可供用户选择。最后我有一个EmployeeManager课程。

在Driver类中,按名称对所有员工进行排序的方法之一就是这样调用:

EmployeeManager em = new EmployeeManager();
em.sortName(); 

现在我在EmployeeManager类中做什么? 首先我制作了阵列:

private Employee[] employees = new Employee[100];

那么我如何对此进行排序,或者首先如何为员工添加一个名为的方法:

addEmployee(int si, String first, char g, double amount)

int    si    =   1 if the employee is a salary,
                 2 if the employee is hourly, 
                 3 if commission
string first =   name
char   g     =   gender
double amount=   wage, salary, or rate-depends on what kind of employee.

非常感谢您的帮助!!

我认为我的员工,薪水,每小时,佣金和司机都是正确的。我只是不知道如何将它们与这个EmployeeManager连接起来。

3 个答案:

答案 0 :(得分:3)

所有对象Commission, Salary, and Hourly都扩展了超类Employee,因此将它们添加到数组时就像这样简单:

/**
 * Adds an Employee object to the employees 
 * array at index i. Note: this method doesn't
 * check if there is already an Employee at index i
 *
 * List item
 * @param index The index to add the Employee object at
 * @param e     The Employee object to add
 */
 public void addEmployee(int index, Employee e)
{
    employees[i] = e; 
}

此方法将起作用,因为所有子类ComissionSalaryHourly都可以推广到Employee超类对象。

使用ArrayList<Employee> employees要容易得多,然后你可以完全忽略索引,只需使用add(E e)类中的ArrayList方法追加Employee对象即可清单。

List<Employee> employees = new ArrayList<>();

public void add(Employee e)
{
   employees.add(e);
}

对于排序,您应该让Employee类实现java.util.Comparable接口并覆盖compareTo(Object o)方法。

希望这有帮助。

答案 1 :(得分:1)

我认为您会发现此链接有用:Java Sorting: Comparator vs comparable

此处显示的示例使用Employee类和List而不是数组。使用比较器和可比较的方法解决分类。

答案 2 :(得分:0)

我假设您要使用数组而不是Collections框架。

您需要遍历employees数组并将每个数组设置为新的Employee。

它看起来像这样

 for (int i = 0; i < employees.length; i++) {
      employees[i] = new Employee();
 }

然后,您可以继续添加员工

 public void addEmployee(int si, String first, char g, double amount) {
     if (numberOfEmployees < employees.length) {
          employees[numberOfEmployees++] = new Employee(si, first, g, amount);
     } else {
          //double the size of the array...
     }
  }

鉴于,你的Employee类还需要一个像这样的构造函数,它将是:

 . . .
 Employee(int si, String first, char g, int amount) {
     this.si = si;
     this.first = first;
     this.g = g;
     this.amount = amount;
 }

 Employee() {
     //empty constructor..
 }
 . . .