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方法。为什么呢?
答案 0 :(得分:2)
equals
方法收到Object
,而不是Person
,并且对于任何非false
实例的参数都应返回Person
。 E.g:
@Override
public boolean equals (Object o) {
if (!(o instanceof Person)) {
return false;
}
Person p = (Person) o;
return p.name.equals(this.name);
}
答案 1 :(得分:1)
这是因为equals()
中Object
方法的签名是
public boolean equals(Object o)
请注意,输入的类型为Object
。从技术上讲,覆盖不能是子类型,它必须是相同的类型。您的方法是重载而不是覆盖。
答案 2 :(得分:0)
equals
方法的签名是
public boolean equals(Object other);
如果您认为这是因为您可能想要将对象与不同类型的对象进行比较。
答案 3 :(得分:0)
public boolean equals(Object obj)
是语法
但请记住也要覆盖哈希码方法。
答案 4 :(得分:0)
覆盖方法时,所有内容都应与您尝试覆盖的方法相同。
在你的情况下,equals方法正在使用Person,但最初它采用了Object Type。
重写方法具有相同的名称,编号和类型 参数和返回类型作为它覆盖的方法。
参考:http://docs.oracle.com/javase/tutorial/java/IandI/override.html