首先,我特别需要使用instanceof运算符。我有一个基类,帐户和一个扩展帐户的CheckingAccount。我有一个帐户的ArrayList;一个是基础帐户,一个是CheckingAccount,一个是SavingsAccount。我需要循环遍历ArrayList并调用一个对CheckingAccount类唯一的方法。这是我的for循环:
for ( Account a : accounts) {
if (a instanceof CheckingAccount) {
System.out.println(a.toString()+" "+a.getOverdraftLimit()+" ");
}
}
a.getOverdraftLimit给出了错误,即没有为类型Account定义getOverdraftLimit。我的ArrayList是由Account引用构建的。有没有办法可以直接在调用中使用instanceof运算符? CheckingAccount a.getOverdraftlimit?
的实例答案 0 :(得分:2)
您需要对a
进行投射才能使用CheckingAccount
方法:
System.out.println(a.toString()+" "+((CheckingAccount)a).getOverdraftLimit()+" ");
为此目的声明一个新变量是很常见的,特别是如果它会被多次使用:
CheckingAccount checking = (CheckingAccount)a;
System.out.println(checking.toString()+" "+checking.getOverdraftLimit()+" ");
答案 1 :(得分:2)
您已经检查过它是CheckingAccount
,但您仍然有Account
类型的引用变量 - a
。
将其投射到CheckingAccount
,以便您可以调用特定于该类的方法。
if (a instanceof CheckingAccount) {
System.out.println(a.toString()+" "+((CheckingAccount) a).getOverdraftLimit()+" ");
}
更面向对象的方法如下:
覆盖toString()
中的CheckingAccount
。让该方法返回透支限制作为返回字符串的一部分,这样就不必将Account
强制转换为CheckingAccount
只是为了调用getOverdraftLimit
。
答案 2 :(得分:1)
将a
投射到CheckingAccount
(因为您知道它是一个),然后调用该方法。
CheckingAccount ca = (CheckingAccount)a;
ca.getOverdraftLimit(); //no error.