[英]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)
这意味着,准确地说,你应该只投的object
来Position
,确保后object
传递的类型的Position
。 这意味着现在可以进行比较了。 如果它的Position
不是第一类的,那么为什么还要进一步比较呢。 因为它永远不可能相等。 我希望你明白我的意思。
[编辑回答评论中的问题]
好吧,实际实例应该是Position类型。 一旦我们使用instanceof运算符得知其类型为Position,就可以安全地将其从Object类型转换为Position类型。 现在的问题是,为什么我们需要投射? 因为实例最初是对象类型的,所以我们不确定实际的类型。 您可能已经知道在Java中可以将任何类型分配给Object类型,因为Object是Java中每个类的父级。 因此,在应用instanceof之前,我们不确定实例的类型。
如果您不强制转换,则将永远无法访问其属性,即x,y和id。 您可以尝试在实际对象上访问其中任何一个而无需强制转换。 你会知道你做不到。 因此,您也无法比较它们。 我希望,这很清楚。
由于这是一个家庭作业问题,因此我不会给出详细的答案。 您必须实现一个equals()
方法,而不是instanceOf()
方法。 我认为此链接有帮助:
它们中的代码示例应该足够了。 再次询问是否需要更多提示。
尽管Object a
是Position
类型,但它被定义为Object
类型。 为了访问Position a
的属性,我们必须使用以下方法将Object a
Position p
为Position p
Position p = (Position)a;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.