在将数组作为父类添加到数组后调用特定于子的方法

时间:2016-02-03 05:09:43

标签: java inheritance arraylist polymorphism

我有两个类: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?

2 个答案:

答案 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)中。

希望这能解决你的疑虑