2016-08-17 1 views
1

私がaccount1.equals(account2)を実行すると、equals()メソッドのaccount2をサブクラス参照BankAccount compareAccount = (BankAccount)obj;に戻して、子クラスフィールドにアクセスできるようにする必要があります。私はそれをダウンキャストすると、その後、私は私がequals()方法でそのフィールドを使用するようにaccount1オブジェクトをダウンキャスト行う必要がありdidntは、このスクリプトではしかし、私の質問ダウンキャスティングおよびアップキャストオブジェクトとダイナミックメソッドバインディング

ためだから今compareAccount.accountAmount

を行うことができます。 Object account1 = new BankAccount(300.22, 122222)私はそのフィールドを見ることができないだろうから、this.accountAmountは、私がchildclassにダウンキャストされるまで動作しませんでした。 これはなぜですか、なぜアカウント1をダウンキャストする必要はありませんか?

public class BankAccountDemo 
{ 
    public static void main(String[] args) 
    { 

     Object account1 = new BankAccount(300.22, 122222); 
     Object account2 = new BankAccount(333.10, 23432434); 

     if(account1.equals(account2)) 
     { 
      System.out.println("The objects are equals"); 
     } 
     else 
     { 
      System.out.println("These objects are not equal"); 
     } 
    } 
} 

Objectクラス

public class BankAccount 
{ 
    private double accountAmount; 
    private int accountNumber; 

    public BankAccount(double accountAmount, int accountNumber) 
    { 
     this.accountAmount = accountAmount; 
     this.accountNumber = accountNumber; 
    } 
    @Override 
    public boolean equals(Object obj) 
    { 
     BankAccount compareAccount = (BankAccount)obj; 
     boolean result; 
     if (this.accountAmount == compareAccount.accountAmount && this.accountNumber == compareAccount.accountNumber) 
     { 
      result = true; 
     } 
     else 
     { 
      result = false; 
     } 
     return result; 
    } 
} 
+0

'equals'メソッドの単一パラメータのパラメータ型は何ですか? –

+2

なぜあなたはそれらを 'オブジェクト'にしていますか? –

+0

'this'の型は' Object'ではなく 'BankAccount'です。 –

答えて

0

理由は、単にBankAccountのequalsメソッドが呼び出されるということです。したがって、このメソッドはすべてのクラスのメンバーに自然にアクセスできます。ない宣言された型(Object) - メソッドは常に仮想あるため

ザは、BankAccountの方法に等しくはaccount1のインスタンスの種類(BankAccount)のequalsメソッドが呼び出されるように、

Object account1 = new BankAccount(300.22, 122222); 
Object account2 = new BankAccount(333.10, 23432434); 
if(account1.equals(account2)) { … } 

で呼び出されます。

ただし、デザインを再考することを検討する必要があります。どのようにequalsが書かれているべきかの説明を検索してください。 instanceof BankAccountまたは少なくともBankAccountがオブジェクトのクラスassignable fromであることを確認してから、パラメータをBankAccountにキャストするだけです。