访问多态数组中的子类变量

时间:2013-10-25 19:52:54

标签: java arrays inheritance polymorphism

我有一个名为bankaccount的类。我有一个Bankaccount对象数组0-2所以确切地说是3。 Bankaccount是一个超级类。我还有另外两个从Bankaccount延伸的类检查和保存。我在检查和储蓄方面有两个领域。一个是ID,另一个是该帐户的余额,应该与该ID相对应。我还有一个叫做作业1的主类。继承我的问题。昨天我被告知我可以通过检查数组来获取帐户的ID,如arBankaccount [i] .getId();这不起作用,因为检查和节省的getter setter方法位于检查和储蓄类中,而不是超类bankaccount。我很困惑如何解决这个问题。我需要检查数组并找出哪个ID位于数组中的哪个引用。遗产对我来说是新的,如果这个问题非常愚蠢,那就很抱歉。

2 个答案:

答案 0 :(得分:2)

Psuedo代码,未经测试且不受我的影响

class BankAccount{ 
   private long id;
   public long getId(){ //blah}
   public void setId( long id) {// blah}
}

class Checking extends BankAccount {
}

class Savings extends BankAccount {
}

现在bankAccount[i].getId(0)可以使用。

答案 1 :(得分:0)

如果您在CheckingSavings中为ID(或者在BankAccount的后一个子类中)实现了不同的实现,则可以使BankAccount成为使用getId / setId方法界面并让Checking / Savings实现该界面:

interface BankAccount
{
  int getId();
  void setId(int id);
}

class Checking implements BankAccount
{
  int getId() { /* your implementation for Checking */ }
  void setId(int id) { /* your implementation for Checking */ }
}

class Savings implements BankAccount
{
  int getId() { /* your implementation for Savings */ }
  void setId(int id) { /* your implementation for Savings */ }
}

注意:您不需要getIdsetId / BankAccount的实现(只是签名),因为它是一个接口:它只描述它的实施者有哪些方法。

优点是无论其他类的实现如何,您都可以提供自己的方法实现。