如何对arraylist的成员执行instanceof操作?

时间:2014-12-10 00:21:41

标签: java arraylist instanceof

首先,我特别需要使用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?

的实例

3 个答案:

答案 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.