0

抽象クラスについて何かを理解するのに問題があります。名前を設定/取得するためのメソッドで作成された抽象クラスがあります。

public abstract class Person {

    private String firstName;

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

このクラスを拡張する他の2つのクラスがあり、それらはWorkerおよびEmployerです。さまざまなワーカーと雇用主を作成し、4 番目のクラスの配列リストに格納していWorkPlaceます。私の質問は、すべての名前をすべて取得したい場合Person、各配列リストを通過せずに次のようなことを行う方法はありworkerList.get.getFirstNameますか?

4

4 に答える 4

3

抽象クラスがすべての名の記録を静的に保持し、それらすべての名前を取得するための静的メソッドを提供しない限り、そうではありません。

于 2013-03-17T20:52:41.203 に答える
1

あなたができることは、クラスのtoString()メソッドをオーバーライドしてPerson、最初の名前を返すことです。

あなたがそれから出るときArrayList.toString()は、のようなもの[firstname1, firstname2, firstname3]です。先頭と末尾の括弧を削除し、 with で文字列を分割できます", "。これは少し複雑で、不要な文字列操作のためにパフォーマンスが低下する可能性がありますが、コレクション内のすべての要素をループする必要はありません。

次に例を示します。

// 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(", ");
}

これは機能するはずで、ループはありません (より良い: 自分で作成したループはありません)。しかし、前述のように、それには多くの費用がかかる場合があります。toString()さらに、コレクションのメソッドの動作が変更された場合、あまり保存されない場合があります。

于 2013-03-17T21:21:05.223 に答える
1

おそらく、 のようなクラスを作成しWorkplace、新しい Employer または Worker が必要なときはいつでも、 の効果で何かを呼び出すことができます。workplaceName.newWorker()これにより、 new が返さWorkerれ、同時にすべてWorkerの を追跡できるため、後で を呼び出すことができますworkplaceName.getAllWorkerNames()

于 2013-03-17T20:54:12.477 に答える
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();
于 2013-03-17T20:58:50.390 に答える