以下は、この割り当てのための5つのクラスの中から選択されたコードです。異種オブジェクトを許可するequals()メソッドのオーバーライド
各クラスには、そのクラスのオブジェクトを5つのクラスの任意のオブジェクトおよびすべてのオブジェクトと比較できるequals()メソッドが必要です。
私の戦略は、正確さのために各オブジェクト値を倍精度に変換することです。
各ClassはNumberを継承するため、各クラスにはdoubleValue()メソッドがあります。
IはのdoubleValueを(実行前RationalN xを型変換しない限り、コードはコンパイルされないであろう)
しかし、それはそのクラスに型変換することができないような別のクラスのオブジェクトを比較すると訴えるコードを実行します。
ここからどこに行くのですか?
public class RationalN extends Number{
private int numerator;
private int denominator;
public RationalN(int x, int y){
if (y == 0){
throw new ArithmeticException("cannot devide by zero");
} else {
this.numerator=x;
this.denominator=y;
}
}
public double doubleValue(){
double value = (double)numerator/(double)denominator;
return (double)value;
}
public boolean equals(Object x){
if (((RationalN)x).doubleValue() == this.doubleValue()){
return true;
} else {
return false;
}
}
あなたはどのクラスをequals()関数の有効な引数として受け入れる準備ができていますか? –
'x'が' this'と同じクラスを持っていることを確認します。 'x'がnullでなく、' x.getClass()== this.getClass() 'の場合、それらは同じクラスです。あなたのクラスが 'final'の場合、' instanceof'も動作します。 –
他のクラスも 'java.lang.Number'を拡張していますか?スーパークラス 'Number'が実装するために必要な他の抽象メソッドはどうでしょうか? – Gevorg