我有一個超類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