2012-02-07 20 views
0

好讓我們說,我有一個抽象的Employee類,3類,從如何使用數組和多態?

Employee(Commission, Salary, and Hourly) 

員工繼承包括

name 
employeeNumber 
gender 

,並在它的那些包括像getHourlyWagegetSalary。然後我有一個驅動程序類與菜單選項供用戶選擇。最後,我有一個EmployeeManager類。

在驅動程序類的方法之一,即按名稱排序的所有僱員,被稱爲上是這樣的:

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連接起來。

+0

請顯示您已經完成的操作並詢問具體問題。 – 2012-02-07 22:41:00

+0

答案是否有用?很難用0反饋來確定你的問題。 – 2012-02-08 03:44:32

回答

1

我想你會發現此鏈接有用:Java Sorting: Comparator vs comparable

有顯示的示例使用一個Employee類和一個列表,而不是一個數組。分類使用比較器和可比較的方法解決。

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; 
} 

此方法將起作用,因爲所有子類ComissionSalary的,和Hourly可以推廣到一個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)方法。

希望這會有所幫助。

0

我假設你想使用數組而不是集合框架。

您需要迭代您的員工數組,並將其設置爲新員工。

這將是這個樣子

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.. 
} 
. . .