好吧,所以有一个父对象,一个作为数组列表的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);
答案 0 :(得分:0)
在这里很难知道如何最好地提供帮助,因为缺少代码和上下文:
BankAccount
对象是 ArrayList
,但显然不是,因为 makeWithdrawal()
方法,但是 ArrayList
的其他用法不可见 - 可能bankAccList
?makeWithdrawal()
方法,一种带有 1 个参数,一种带有 2 个参数。getAcct()
方法是否采用 String social
或 int index
,或者是否有两个重载方法?链式 bank.getAcct(bank.getAcct(index).getAccDet()).getSocSec())
子句进一步混淆了这一点。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"
}