0

我有一些问题了解抽象类。我有一个使用设置/获取名称的方法创建的抽象类:

public abstract class Person {

    private String firstName;

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

我有 2 个其他类扩展了这个类,它们是WorkerEmployer. 我有不同的工人和雇主被创建并存储到第四个类中的数组列表中WorkPlace。我的问题是,如果我想获得每个人的每个名字,Person有没有办法在不通过每个数组列表并执行类似操作的情况下做到这一点workerList.get.getFirstName

4

4 回答 4

3

除非您的抽象类静态保留所有名字的记录,并且您提供了一个静态方法来获取所有这些名字。

于 2013-03-17T20:52:41.203 回答
1

也许你可以创建一个类Workplace,当你想要一个新的 Employer 或 Worker 时,你会调用一些类似 的东西workplaceName.newWorker(),这将返回一个新Worker的,同时跟踪所有Worker的 s,以便你以后可以调用workplaceName.getAllWorkerNames()

于 2013-03-17T20:54:12.477 回答
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 回答
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 回答