0

说明说:创建一个 equals 方法,该方法接受对象引用,如果给定对象等于该对象,则返回 true。*提示:你需要'instanceof'并转换为(位置)

我有:

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)

这意味着,确切地说,您应该只在确保传递的类型是 type之后才object转换 to 。这意味着现在可以通过比较走得更远。如果它首先不是类型,那么您为什么还要费心进一步比较它。因为它永远不可能相等。我希望你明白我的意思。PositionobjectPositionPosition

[编辑以回答评论中的问题]

好吧,实际的实例应该是 Position 类型。一旦我们知道它是使用 instanceof 运算符的 Position 类型,我们就知道将它从类型 Object 转换为 Position 类型是安全的。现在的问题是为什么我们需要强制转换?因为最初实例的类型是 Object,我们不确定实际类型。您可能已经知道在 Java 中可以将任何类型分配给 Object 类型,因为 Object 是 Java 中每个类的父类。因此,在应用 instanceof 之前,我们不确定实例的类型。

如果您不强制转换它,您将永远无法访问它的属性,即 x、y 和 id。您可以尝试在不强制转换的情况下访问实际对象上的任何这些。你会知道你不能。因此,您也无法比较它们。我希望,这清楚了。

于 2010-10-13T05:09:37.703 回答
1

As this is a homework question, I won't give a detail answer. You have to implement a equals() method, not a instanceOf() method. I think this link help:

The code example in them should be sufficient. Ask again if you need more hint.

于 2010-10-13T05:11:25.593 回答
0

Even though the Object a is of a Position type, but it is defined as Object type. In order to access the properties of Position a, we have to cast Object a to Position p using

Position p = (Position)a; 
于 2014-12-11T02:24:50.970 回答