首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java对象instanceof

Java对象instanceof
EN

Stack Overflow用户
提问于 2010-10-13 13:07:28
回答 3查看 2.5K关注 0票数 0

指令说:创建一个equals方法,该方法接受一个对象引用,如果给定的对象等于这个对象,则返回true。*提示:您将需要'instanceof‘并强制转换为(Position)

我有:

代码语言:javascript
复制
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;
    }

但是我做错了,我不知道我的问题在哪里。我对对象是个新手,所以这让我有点困惑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-13 13:11:26

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

  • http://www.ibiblio.org/java/course/week4/37.html
  • http://www.billthelizard.com/2008/08/implementing-equals-in-java.html

它们中的代码示例应该足够了。如果需要更多提示,请再问一遍。

票数 1
EN

Stack Overflow用户

发布于 2010-10-13 13:09:38

他明确地说创建一个equals()方法,你在这里也得到了它。但即便如此,您还是创建了一个名为instanceOf()的方法。为什么?

此外,在传递其他类型的对象的情况下,您可能会在该行上获得一个ClassCastException

代码语言:javascript
复制
    if ((Position)a instanceof Position)

准确地说,这意味着在确保传递的objectPosition类型之后,应该只将object强制转换为Position。这意味着现在可以通过比较更进一步。如果它一开始就不是Position类型,那么你为什么还要费心去比较它。因为它永远不会相等。我希望你能明白我的意思。

已编辑以在comment中回答问题

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

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

票数 1
EN

Stack Overflow用户

发布于 2014-12-11 10:24:51

即使Object aPosition类型,但它被定义为Object类型。为了访问Position a的属性,我们必须使用以下命令将Object a转换为Position p

代码语言:javascript
复制
Position p = (Position)a; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3920928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档