Java对象instanceof

时间:2010-10-13 05:07:28

标签: java object instanceof

说明说: 创建一个采用对象引用的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;
    }

但我做错了,我不知道我的问题是什么。我是对象的新手,所以这让我感到困惑..

3 个答案:

答案 0 :(得分:1)

他明确表示创建一个equals()方法,你也可以在这里找到它。但即便在这之后你创建了一个名为instanceOf()的方法。为什么呢?

此外,如果传递了其他类型的对象,您可能会在此行上获得ClassCastException

    if ((Position)a instanceof Position)

准确地说,在确保传递的object属于Position类型后,您应该只将object强制转换为Position。这意味着现在通过比较进一步发展是件好事。如果它首先不是Position类型,那么为什么还要进一步比较呢。因为它永远不会是平等的。我希望你明白我的观点。

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

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

如果您没有投射它,您将永远无法访问其属性,即x,y和id。您可以尝试访问实际对象中的任何这些而不进行强制转换。你会知道你不能。因此,你无法比较这些。我希望,这说清楚了。

答案 1 :(得分:1)

由于这是一个家庭作业问题,我不会给出详细的答案。 您必须实施equals()方法,而不是instanceOf()方法。我认为这个链接有帮助:

其中的代码示例应该足够了。再问一下你是否需要更多提示。

答案 2 :(得分:0)

尽管Object a属于Position类型,但它被定义为Object类型。要访问Position a的属性,我们必须使用

Object a投射到Position p
Position p = (Position)a;