2013-03-17 192 views
0

我有一些問題了解抽象類的一些問題。我有設置/獲取一個名稱的方法創建一個抽象類:使用抽象類方法

public abstract class Person { 

    private String firstName; 

    public void setFirstname(String name) 
    { 
     this.firstName = name; 
    } 
    public String getFirstName() 
    { 
     return firstname; 
    } 

我有2個擴展這個類的其他類,他們是WorkerEmployer。我創建了不同的工人和僱主,並將其存儲在第四課中的arraylist中。我的問題是,如果我想讓每個Person的每個名字都有辦法做到這一點,而不需要通過每個數組列表並執行類似workerList.get.getFirstName的事情?

+0

如果將'Person'Instances存儲在'ArrayList'中,否。 – Sam 2013-03-17 20:53:36

+0

到目前爲止,你的類並不是真正的抽象類,它不包含抽象方法。 – Sentry 2013-03-17 20:54:05

+2

標題不同於你的問題。你的問題不是那種抽象類的方法。你的問題是,你不知道一種循環遍歷集合而不實際循環集合的方式。 ;)另外:如果是集合,沒有循環就沒有辦法循環。 – 2013-03-17 20:54:08

回答

3

除非您的抽象類靜態地保留所有名字的記錄,並且您提供了一個靜態方法來獲取所有這些名稱。

+0

好的,謝謝我,我明白了。我可能不應該記錄這些名字,因爲它們可以在我的程序中刪除和更改。謝謝您的回答。 – bardockyo 2013-03-17 20:56:27

1

也許你可以創建一個類像Workplace,每當你想有一個新的僱主或工人,你會打電話東西的workplaceName.newWorker()的效果,這將返回一個新的Worker,並在同一時間將所有Worker S的軌道,以便以後可以撥打workplaceName.getAllWorkerNames()

0

,如果您有:

ArrayList<Person> list = new ArrayList<Person>(); 

然後:

Employer e1 = new Employer(); 
Worder w1 = new Worker(); 

list.add(e1); 
list.add(w1); 

然後你要做的:

list.get(0).getFirstName(); 
1

你可以做的是重寫toString()方法在Person類並返回名字。

當你然後離開ArrayList.toString()是類似於[firstname1, firstname2, firstname3]。您可以刪除前導括號和尾部括號,並使用", "分割字符串。這有點複雜,並且可能會由於不必要的字符串操作而降低性能,但您不需要遍歷集合中的所有元素。

下面是一個例子:

// in Person class do this 
@Override 
public String toString() { 
    return this.firstName; 
} 


// in your WorkPlace class do this 
public String[] getAllFirstNames() { 
    String allNames = workerList.toString(); 
    allNames = allNames.substring(1, allNames.length - 2); 
    return allNames.split(", "); 
} 

這應該工作,沒有環路(最好:無迴路你由你自己寫的)。但如前所述,這可能會花費很多。此外,如果該方法的行爲發生變化,它可能不是非常省錢。