我有一个超类Order
,它有一个子类OrderBook
。 方法在OrderBook
中被覆盖。该方法的具体实现如下: -重写Java中的equals(...)方法时遇到问题
public boolean equals(Order o)
{
if(o==null){
System.out.println("object is null.");
return false;
}
if(o==this){
System.out.println("The object is itself.");
return true;
}
if(o instanceof OrderBook)
{
OrderBook o1 = (OrderBook)o;
if(!(o1.productId.equals(productId))){
System.out.println("productId mismatch.");
return false;
}
if(!(o1.customerId.equals(customerId))){
System.out.println("customerId mismatch.");
return false;
}
if(o1.book!=book){
System.out.println("book mismatch.");
return false;
}
}
return true;
}
我遇到了一个意外的输出,如果我给下面的语句: -
Order order1 = new OrderBook("Algorithms","Kunal",false);
Order order2 = new OrderBook("Algorithms","Kunal",false);
System.out.println(order1.equals(order2));
应该显示true
但其显示false
。另外,如果我将equals(...)
中的参数更改为Object o
,那么整个程序运行没有任何问题。
我的疑问是,为什么我们在使用Object
时应该使用Order
?
你实际上不重写'equals'。因为Object类中的'equals'具有不同的签名。 '公共布尔等于(对象o)' – ferrerverck
如果您正在覆盖,你overring父类的方法。这是重载你正在尝试做的方法。 – Zeus