Java链表项覆盖?

时间:2015-03-03 16:39:00

标签: java linked-list

我有一个帐户链接列表,其中包含员工和经理(继承自帐户)。问题是我注意到最后添加的项目似乎覆盖了列表中的其余部分。它为什么这样做?我做错了什么?谢谢。我将下面的代码和控制台输出。提前抱歉,如果我真的很蠢,并且遗漏了一些明显的东西!

public class Database {
static List <Account> Accounts = new LinkedList<Account>();

public static void main(String[] args) {
        Employee Geoff = new Employee("Geoff", "password1");
        Manager Bob = new Manager("Bob", "password2");
        Employee John = new Employee("John", "password3");

        Accounts.add(Geoff);
        Accounts.add(Bob);
        Accounts.add(John);
        list();
    }

public static void list() {
    for (Account u : Accounts) {
            System.out.println(u);
    }
}

控制台输出是:

John, John, John 

:(

编辑:代码已被更改对不起家伙!

public abstract class Account {

    protected static String name;
    protected static String passcode;


    public User(String name, String passcode) {
        this.name = name;
        this.passcode = passcode;
    }
}

经理和员工都继承了这一点,以便经理:

public Manager(String name, String passcode) {
    super(name, passcode);

}

2 个答案:

答案 0 :(得分:4)

从字段声明中删除关键字`static,它将正常工作。

static变量与类关联,而不是与对象关联。这意味着这个字段在这个类的每个实例之间共享。

答案 1 :(得分:0)

类变量(静态)只有一个在类的所有实例之间共享的实例。这意味着每次你说&#34; this.name&#34;,它在语义上等同于说&#34; User.name&#34;,因为&#34;这&#34;是指实例,而不是类。

将类变量(静态变量)更改为实例变量(非静态变量),一切都将按预期工作。

以下是解释类与实例变量的文档。

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html