bankaccount という名前のクラスがあります。Bankaccount オブジェクトの配列が 0 ~ 2 あるので、正確には 3 です。Bankaccount はスーパー クラスです。Bankaccount から拡張された他の 2 つのクラス Checking と Savings があります。Checking と Savings に 2 つのフィールドがあります。1 つは ID で、もう 1 つはその ID に対応するはずの口座の残高です。また、割り当て 1 というメイン クラスもあります。私の質問はこちらです。昨日、arBankaccount[i].getId(); のように配列をチェックすることでアカウントの ID を取得できると言われました。これは機能しません。これは、小切手と貯蓄のゲッター セッター メソッドが、スーパークラスの銀行口座ではなく当座預金クラスにあるためです。これを回避する方法について混乱しています。配列を調べて、配列内のどの参照にどの ID が配置されているかを調べる必要があります。
質問する
283 次
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
Checking
idとSavings
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 */ }
}
getId
注: / setId
inはインターフェースであるため、 BankAccount
(署名のみ)の実装は必要ありません。実装者が持つメソッドのみを記述します。
利点は、他のクラスの実装に関係なく、メソッドの独自の実装を提供できることです。
于 2013-10-25T20:37:27.700 に答える