使用抽象类方法

时间:2013-03-17 20:49:28

标签: java abstract-class

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

public abstract class Person {

    private String firstName;

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

我还有另外两个扩展此类的类,它们是WorkerEmployer。我创建了不同的工人和雇主,并将其存储在名为WorkPlace的第四类中的arraylists中。我的问题是,如果我想获得每个Person的每个名字,有没有办法在不经过每个arraylist并做workerList.get.getFirstName之类的事情的情况下做到这一点?

4 个答案:

答案 0 :(得分:3)

除非你的抽象类静态地保存所有名字的记录,否则你提供一个静态方法来获取所有这些名字。

答案 1 :(得分:1)

也许你可以创建一个像Workplace这样的类,每当你想要一个新的雇主或工人时,你会调用workplaceName.newWorker()的效果,这会返回一个新的Worker和同时跟踪所有Worker,以便稍后调用workplaceName.getAllWorkerNames()

答案 2 :(得分: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(", ");
}

这应该有效并且没有循环(更好:没有你自己编写的循环)。但如前所述,它可能会花费很多。另外,如果集合的toString()方法的行为发生变化,它可能不会很节省。

答案 3 :(得分: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();