有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个班叫bankaccount。我有一个Bankaccount对象数组,精确地说是0-2-3。Bankaccount是一个超级类。我还有另外两个班,支票和储蓄都是从银行账户中提取的。我有两个字段是支票和储蓄。一个是ID,另一个是账户的余额,应该对应于该ID。我还有一个叫做赋值1的主类。这是我的问题。昨天有人告诉我,我可以通过检查数组(如arBankaccount[I])来获取帐户id。getId();这不起作用,因为检查和储蓄的getter setter方法位于检查和储蓄类而不是超类bankaccount中。我不知道该怎么解决这个问题。我需要检查数组并找出哪个ID位于数组中的哪个引用。继承对我来说是新鲜事,如果这个问题很愚蠢,我很抱歉


共 (2) 个答案

  1. # 1 楼答案

    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)将起作用

  2. # 2 楼答案

    如果在id的CheckingSavings中有不同的实现(或者在BankAccount的后一个子类中),可以使用getId/setId方法使BankAccount成为一个接口,并让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 */ }
    }
    

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

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