考虑下面给出的示例代码:
摘要名称
public abstract class Name {
private String name;
public Name(String name)
{
this.name=name;
}
public String toString()
{
return name;
}
public String getName() {
return name;
}
}
名字
public class FirstName extends Name {
FirstName(String name) {
super(name);
}
public String toString()
{
return getName();
}
}
姓氏
public class LastName extends Name{
LastName(String name) {
super(name);
}
public String toString()
{
return getName();
}
}
测试名称
public class TestName {
public static void main(String[] args) {
Set<Name> names=new HashSet<Name>();
names.add(new FirstName("George"));
names.add(new LastName("Bush"));
names.add(new FirstName("Bush"));
System.out.println(names);
}
}
输出
[Bush, Bush, George]
现在的问题是如何覆盖 hashcode 和 equal 的方法,使我只有一个名字“Bush”作为名字或姓氏?
最佳答案
你可能想要这样的东西:
public boolean equals(Object obj)
{
if (obj == null)
return false;
if (!(obj instanceof Name))
return false;
Name name = (Name) obj;
return this.name.equals(name.name);
}
public int hashCode()
{
return name.hashCode();
}
关于java - 覆盖抽象父类(super class)的 equal 和 hashCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3923374/