说明说: 创建一个采用对象引用的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;
}
但我做错了,我不知道我的问题是什么。我是对象的新手,所以这让我感到困惑..
答案 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;