繁体   English   中英

Java对象instanceof

[英]Java objects instanceof

指令说:创建一个equals方法,该方法接受一个对象引用,如果给定对象等于该对象,则返回true。 *提示:您将需要'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;
    }

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

他清楚地说创建了一个equals()方法,您也可以在这里找到它。 但是即使如此,您仍然创建了一个名为instanceOf()的方法。 为什么?

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

    if ((Position)a instanceof Position)

这意味着,准确地说,你应该只投的objectPosition ,确保后object传递的类型的Position 这意味着现在可以进行比较了。 如果它的Position不是第一类的,那么为什么还要进一步比较呢。 因为它永远不可能相等。 我希望你明白我的意思。

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

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

如果您不强制转换,则将永远无法访问其属性,即x,y和id。 您可以尝试在实际对象上访问其中任何一个而无需强制转换。 你会知道你做不到。 因此,您也无法比较它们。 我希望,这很清楚。

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

它们中的代码示例应该足够了。 再次询问是否需要更多提示。

尽管Object aPosition类型,但它被定义为Object类型。 为了访问Position a的属性,我们必须使用以下方法将Object a Position pPosition p

Position p = (Position)a; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM