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