0

指示は次のように述べています: オブジェクト参照を受け取り、指定されたオブジェクトがこのオブジェクトと等しい場合に true を返す equals メソッドを作成します。* ヒント: 'instanceof' と (Position) へのキャストが必要です

私は持っている:

class Position {

    private double x,y;
    private int id;

public boolean instanceOf(Object a)
    {
        boolean isInstance;
        if ((Position)a instanceof Position)
            isInstance=true;
        else
            isInstance=false;
        return isInstance;
    }

しかし、私はそれを間違っており、自分の問題が何であるかわかりません。私はオブジェクトに慣れていないので、これはちょっと混乱しています..

4

3 に答える 3

1

彼は明確にequals()メソッドを作成すると言いましたが、ここでも同様です。しかし、このすべての後でも、 という名前のメソッドを作成しましたinstanceOf()。なんで?

さらに、他のタイプのオブジェクトが渡された場合、この行でClassCastExceptionが発生する場合があります。

    if ((Position)a instanceof Position)

つまり、渡された型が であることを確認した後、 objecttoのみをキャストする必要があります。つまり、比較してさらに進んでください。そもそもタイプではない場合、それをさらに比較する必要があるのはなぜですか。決して平等にはなれないからです。あなたが私の主張を理解していることを願っています。PositionobjectPositionPosition

[コメントの質問に答えるために編集]

実際のインスタンスは、Position 型である必要があります。instanceof 演算子を使用して Position 型であることがわかったら、それを Object 型から Position 型に安全にキャストできることがわかります。問題は、なぜキャストする必要があるのか​​ということです。最初はインスタンスの型が Object であったため、実際の型について確信が持てませんでした。Object は Java のすべてのクラスの親であるため、Java では任意の型を Object 型に割り当てることができることは既にご存じかもしれません。したがって、instanceof を適用する前は、インスタンスのタイプについて確信が持てませんでした。

キャストしない場合、そのプロパティ、つまり x、y、および id にアクセスできなくなります。キャストせずに実際のオブジェクトでこれらのいずれかにアクセスしてみることができます。できないことがわかります。したがって、それらを比較することもできません。これで明らかになったと思います。

于 2010-10-13T05:09:37.703 に答える
1

これは宿題の質問なので、詳細な回答はしません。equals()メソッドではなく、メソッドを実装する必要がありますinstanceOf()。このリンクが役立つと思います:

それらのコード例で十分です。さらにヒントが必要な場合は、もう一度質問してください。

于 2010-10-13T05:11:25.593 に答える