我只想确保自己做对了。我有一个子类帐户,然后是两个子类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);
......或者我误解了吗?我是新手,所以帮助我预先准备!谢谢!
答案 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();