指令说:创建一个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;
}但是我做错了,我不知道我的问题在哪里。我对对象是个新手,所以这让我有点困惑。
发布于 2010-10-13 13:11:26
由于这是一个家庭作业问题,我不会给出详细的答案。您必须实现equals()方法,而不是instanceOf()方法。我认为这个链接有帮助:
它们中的代码示例应该足够了。如果需要更多提示,请再问一遍。
发布于 2010-10-13 13:09:38
他明确地说创建一个equals()方法,你在这里也得到了它。但即便如此,您还是创建了一个名为instanceOf()的方法。为什么?
此外,在传递其他类型的对象的情况下,您可能会在该行上获得一个ClassCastException。
if ((Position)a instanceof Position)准确地说,这意味着在确保传递的object是Position类型之后,应该只将object强制转换为Position。这意味着现在可以通过比较更进一步。如果它一开始就不是Position类型,那么你为什么还要费心去比较它。因为它永远不会相等。我希望你能明白我的意思。
已编辑以在comment中回答问题
那么,实际的实例应该是Position类型的。一旦我们知道它是使用instanceof运算符的Position类型,我们就知道将它从Object类型转换为Position类型是安全的。现在的问题是,为什么我们需要强制转换?因为最初实例的类型是Object,而我们不确定实际的类型。您可能已经知道,在Java中可以将任何类型赋给Object类型,因为Object是Java中每个类的父类。因此,在应用instanceof之前,我们不确定实例的类型。
如果不强制转换它,您将永远无法访问它的属性,即x、y和id。您可以尝试在不进行强制转换的情况下在实际对象上访问其中的任何一个。你会知道你不能。因此,你也不能比较它们。我希望,这表明了这一点。
发布于 2014-12-11 10:24:51
即使Object a是Position类型,但它被定义为Object类型。为了访问Position a的属性,我们必须使用以下命令将Object a转换为Position p
Position p = (Position)a; https://stackoverflow.com/questions/3920928
复制相似问题