簡體   English   中英

為什么此equals方法不能正確覆蓋object.equals方法?

[英]Why doesn't this equals method properly override the object.equals method?

public class Person{
    private String name;
    public Person(String name) {
         this.name = name;
    }
    public boolean equals (Person p){
         return p.name.equals(this.name);
    }
}

equals方法不能正確覆蓋object.equals方法。 為什么?

equals方法接收Object ,而不是Person ,並且對於不是Person實例的任何參數,應返回false 例如:

@Override
public boolean equals (Object o) {
     if (!(o instanceof Person)) {
         return false;
     }
     Person p = (Person) o;
     return p.name.equals(this.name);
}

這是因為Object equals()方法的簽名是

public boolean equals(Object o)

注意輸入的類型是Object 從技術上講,替代不能是子類型,它必須是同一類型。 您的方法是重載而不是覆蓋。

equals方法的簽名是

public boolean equals(Object other);

如果您考慮一下,那是因為您可能想將對象與不同類型的對象進行比較。

public boolean equals(Object obj) 

是語法

但是請記住也要覆蓋hashcode方法。

覆蓋方法時,所有內容均應與您要覆蓋的方法相同。

在您的情況下,equals方法使用的是Person,但最初它采用的是Object Type。

覆蓋方法與其覆蓋的方法具有相同的名稱,數量和參數類型,並且返回類型相同。

參考: http : //docs.oracle.com/javase/tutorial/java/IandI/override.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM