java - 覆盖抽象父类(super class)的 equal 和 hashCode

标签 java abstract-class equals hashcode

考虑下面给出的示例代码:

摘要名称

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/

相关文章:

java - 如果我重载 equals 我仍然应该重写 java 中的 haschode 吗?

c - char和int的严格比较

java - 在java中实现接口(interface)和抽象类中都存在的方法

Python:抽象实例变量?

java - setOnClickListener android 工作室

java - Tomcat 6.0.x 配置HTTP

cocoa - 抽象类或协议(protocol),Cocoa 推荐的做法是什么?

java - 为什么这个 Java 代码编译成功

java - 线程生命周期

java - 使用 Bellman Ford 算法检测负循环