【问题标题】:Accessing a subclass variable in a polymorphic array访问多态数组中的子类变量
【发布时间】:2013-11-05 01:48:40
【问题描述】:

我有一个名为 bankaccount 的类。我有一个 Bankaccount 对象数组 0-2 所以准确地说是 3 个。银行账户是一个超级类。我还有另外两个类 Checking 和 Savings 从 Bankaccount 扩展。我在支票和储蓄中有两个领域。一个是 ID,另一个是应该对应于该 ID 的帐户余额。我还有一个名为 assignment 1 的主要课程。这是我的问题。昨天有人告诉我,我可以通过检查数组来获取帐户的 ID,例如 arBankaccount[i].getId();这不起作用,因为检查和储蓄的 getter setter 方法位于检查和储蓄类而不是超类银行帐户中。我对如何解决这个问题感到困惑。我需要检查数组并找出哪个 ID 位于数组中的哪个引用处。继承对我来说是新的,如果这个问题很愚蠢,我很抱歉。

【问题讨论】:

  • 也许使 BankAccount 抽象化并保留未实现的 getId/setId 方法。或者直接在 BankAccount 中实现。或者,最坏的情况是,您可以创建一个需要 getId() 方法的 Identifiable 接口,并且您可以在转换和调用 getId() 之前检查数组的元素是否实现了该接口

标签: java arrays inheritance polymorphism


【解决方案1】:

伪代码,未经测试,在我脑海中浮现

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) 可以工作了。

【讨论】:

    【解决方案2】:

    如果您在CheckingSavings 中对id 有不同的实现(或者可能在BankAccount 的后一个子类中),您可以使用@ 将BankAccount 设为接口 987654325@/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 */ }
    }
    

    注意:您不需要在BankAccount 中实现getId/setId(只需签名),因为它是一个接口:它只描述了它的实现者拥有的方法。

    优点是您可以提供自己的方法实现,而不管其他类的实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      • 2015-06-14
      • 1970-01-01
      相关资源
      最近更新 更多