ArrayList和具有多态性和复制构造函数的继承

时间:2018-12-01 01:15:11

标签: java polymorphism

好吧,所以有一个父对象,一个作为数组列表的BankAccount,然后BankAccount固有了三个子类:支票,储蓄和CD帐户。
一些东西: 当我在进行多态调用之后尝试访问子级的方法时,我得到的CDAccount类型的BankAccount对象无法访问这些方法。 查看代码:

                            } else if(bank.getAcct(index).accType.equalsIgnoreCase("Savings")) 
                            {

                                BankAccount bankAcc = new SavingsAccount ((SavingsAccount) bank.getAcct(index));

                                bankAcc.makeWithdrawal(requestedAccount, amountToWithdraw);                                 

                            } else {
                                BankAccount bankAcc = new CheckingAccount ((CheckingAccount) bank.getAcct(index));

我尝试在此处进行投射,但收到一条错误消息,说明发送到.makeWithdrawl(已被CheckingAccount覆盖)的args如何不能使用BankAccount对象

                bankAcc.makeWithdrawal( amountToWithdraw);

See Attempted Casting...:(

1 个答案:

答案 0 :(得分:0)

在这里很难知道如何最好地提供帮助,因为缺少代码和上下文:

  1. 您说 BankAccount 对象是 ArrayList,但显然不是,因为 makeWithdrawal() 方法,但是 ArrayList 的其他用法不可见 - 可能bankAccList ?
  2. 似乎有两种 makeWithdrawal() 方法,一种带有 1 个参数,一种带有 2 个参数。
  3. getAcct() 方法是否采用 String socialint index,或者是否有两个重载方法?链式 bank.getAcct(bank.getAcct(index).getAccDet()).getSocSec()) 子句进一步混淆了这一点。
  4. 习语 return new (BankAccount) CheckingAccount() 是不正确的语法。 CheckingAccount 扩展 BankAccount 或不扩展。如果是这样,则不需要强制转换。如果没有,则投射将失败。

假设

public class CheckingAccount extends BankAccount {
}

然后这将起作用:

public BankAccount getAcct(...)
{
    return new CheckingAccount(...);
}

并且等价于:

public BankAccount getAcct(...)
{
    return (BankAccount) new CheckingAccount(...); // Cast before the "new"
}