将对象添加到列表?

时间:2012-01-02 09:29:00

标签: java

我只想确保自己做对了。我有一个子类帐户,然后是两个子类SavingsAccount和CreditAccount,我想将它们存储在一个arraylist中,但是当我这样做时,我会收到错误

List<Account> accountList = new ArrayList<Account>();
// creditaccount
Account account = new CreditAccount();
list.add(account);

// savingsaccount
Account account = new SavingsAccount();
list.add(account);

我想我可以像这样添加它们,但我想必须有这样一个独特的名字......

Account account1 = new SavingsAccount();
list.add(account1);

......或者我误解了吗?我是新手,所以帮助我预先准备!谢谢!

2 个答案:

答案 0 :(得分:5)

你是对的,变量名在给定范围内是唯一的(本地方法与实例变量)。然而,由于这是面向对象的,因此您可以重用该变量,因为它只引用给定的对象:

List<Account> accountList = new ArrayList<Account>();
// creditaccount
Account account = new CreditAccount();
list.add(account); // <-- adds the creditAccount to the list

// savingsaccount
account = new SavingsAccount(); // <-- reuse account
list.add(account); // <-- adds the savingsAccount to the list

就个人而言,我不喜欢这种方法,而是使用不言自明的名字,如:

Account creditAccount = new CreditAccount();
Account savingsAccount = new SavingsAccount();
...
list.add(creditAccount);
list.add(savingsAccount);

更新1: 如果您不必进一步初始化帐户对象,则可以执行此操作:

list.add(new CreditAccount());
list.add(new SavingsAccount());

更新2: 我忘了提到使用匿名内部块的“更高级”方法,使您能够在方法内多次声明变量:

void someMehtod() {
    List<Account> accountList = new ArrayList<Account>();

    { // <-- start inner block
        Account account = new CreditAccount();
        accountList.add(account);
    } // <-- end inner block

    {
        Account account = new SavingsAccount();
        accountList.add(account);
    }

    account.toString() // compile time error as account is not visible!

}

答案 1 :(得分:2)

帐户帐户=新SavingsAccount();
这将产生编译时错误。您不能两次申报帐户。 将上述陈述改为 account = new SavingsAccount();