Java链表项覆盖?
Java linked list item overwriting?
我有一个帐户链接列表,其中包含员工和经理(从帐户继承)。问题是我注意到最后添加的项目似乎覆盖了列表中的其余项目。为什么要这样做?我做错了什么?谢谢。我将把我的代码和控制台输出放在下面。如果我真的很愚蠢并且遗漏了一些明显的东西,请提前道歉!
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);
}
从字段声明中删除关键字 `static,它将正常工作。
static
变量与 class 关联,而不是与对象关联。这意味着这些字段在 class.
的每个实例之间共享
Class 变量(静态)将只有一个实例,该实例在 class 的所有实例之间共享。这意味着每次你说 "this.name",它在语义上等同于说 "User.name",因为 "this" 指的是实例,而不是 class。
将 class 变量(静态变量)更改为实例变量(非静态变量),一切都会如您所愿。
这是解释 class 与实例变量的文档。
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
我有一个帐户链接列表,其中包含员工和经理(从帐户继承)。问题是我注意到最后添加的项目似乎覆盖了列表中的其余项目。为什么要这样做?我做错了什么?谢谢。我将把我的代码和控制台输出放在下面。如果我真的很愚蠢并且遗漏了一些明显的东西,请提前道歉!
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);
}
从字段声明中删除关键字 `static,它将正常工作。
static
变量与 class 关联,而不是与对象关联。这意味着这些字段在 class.
Class 变量(静态)将只有一个实例,该实例在 class 的所有实例之间共享。这意味着每次你说 "this.name",它在语义上等同于说 "User.name",因为 "this" 指的是实例,而不是 class。
将 class 变量(静态变量)更改为实例变量(非静态变量),一切都会如您所愿。
这是解释 class 与实例变量的文档。
http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html