我有两个类:BankAccount和CheckingAccount。 CheckingAccount类继承自BankAccount类。
ArrayList<BankAccount> bankAccounts = new ArrayList<BankingAccount>();
bankAccounts.add( new CheckingAccount(200.00) );
bankAccounts.get(0).writeCheck(100.00);
所以我将支票帐户添加到一系列银行帐户中(后来我还保存了帐户以便进行多态处理),但由于writeCheck(double amount)
只是CheckingAccount类的一种方法,因此它给了我一个错误在最后一行说BankAccount没有这种方法。有没有办法只为我使用支票帐户特定方法的行进行强制转换?或者是否有一些其他参数创建ArrayList?
答案 0 :(得分:3)
((CheckingAccount)bankAccounts.get(0)).writeCheck(100.00);
或者以类型安全的方式
if(bankAccounts.get(0) instanceof CheckingAccount) {
((CheckingAccount)bankAccounts.get(0)).writeCheck(100.00);
}
答案 1 :(得分:1)
试试这个:
CheckingAccount ca = (CheckingAccount) bankAccounts.get(0);
ca.writeCheck(100.00);
在上面的代码中,BankAccount引用引用的bankAccounts.get(0)
返回的对象被明确地转换为子类的引用。
要么是这个,要么你应该在你的BankAccount类中定义这个方法writeCheck(double a)
。在编译期间,检查被调用的方法是否在引用变量的类中定义。由于您没有在父类中定义writeCheck(double)
方法,因此编译器会为您编写的代码抛出错误。
运行时多态性将确定引用变量是指向父类的对象还是子类的对象。除非您明确执行上述类型转换,否则方法的签名也必须存在于您的父类(BankAccount)中。
希望这能解决你的疑虑