0

bankaccount という名前のクラスがあります。Bankaccount オブジェクトの配列が 0 ~ 2 あるので、正確には 3 です。Bankaccount はスーパー クラスです。Bankaccount から拡張された他の 2 つのクラス Checking と Savings があります。Checking と Savings に 2 つのフィールドがあります。1 つは ID で、もう 1 つはその ID に対応するはずの口座の残高です。また、割り当て 1 というメイン クラスもあります。私の質問はこちらです。昨日、arBankaccount[i].getId(); のように配列をチェックすることでアカウントの ID を取得できると言われました。これは機能しません。これは、小切手と貯蓄のゲッター セッター メソッドが、スーパークラスの銀行口座ではなく当座預金クラスにあるためです。これを回避する方法について混乱しています。配列を調べて、配列内のどの参照にどの ID が配置されているかを調べる必要があります。

4

2 に答える 2

2

疑似コード、テストされておらず、頭のてっぺんから外れています

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)動作します。

于 2013-10-25T19:57:06.490 に答える
0

CheckingidとSavingsid (またはおそらく の後のサブクラスBankAccount) で異なる実装を使用している場合は、/メソッドを使用しBankAccountインターフェイスを作成し、 /にそのインターフェイスを実装させることができます。getIdsetIdCheckingSavings

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注: / setIdinはインターフェースであるため、 BankAccount(署名のみ)の実装は必要ありません。実装者が持つメソッドのみを記述します。

利点は、他のクラスの実装に関係なく、メソッドの独自の実装を提供できることです。

于 2013-10-25T20:37:27.700 に答える