覆盖Object类的相等方法

Ang*_*era 1 java overriding equals object

好吧所以让我们说你有两个课:ClassAClassB

  • ClassA扩展ObjectClassB扩展ClassA
  • ClassA 没有参数构造函数
  • ClassB 有一个整数变量x和一个带有一个初始化x的整数参数的构造函数
  • ClassA不会覆盖equals它继承的Object
  • ClassB如果整数x在两个对象中具有相同的值,则覆盖equals以使两个对象ClassB被认为相等.

      //In Class B you have this method:
      public boolean equals (Object obj) {
          if (obj == null) {
              return false;
          }
          if (obj.getClass() != this.getClass()) {
              return false;
          }
          if (!super.equals(obj)) {
              return false;
          }
    
          B b = (B) obj;
    
          return this.x == b.x;
      }
    
    Run Code Online (Sandbox Code Playgroud)

在主要的,如果您要运行此代码

    B b1 = new B(1);
    B b2 = new B(1);
    System.out.println(b1.equals(b2));
Run Code Online (Sandbox Code Playgroud)

我相信会打印"假",但我试图理解为什么.也许我还没有完全理解覆盖的概念,但我只是认为B应该覆盖该Object.equals方法,以便确保x字段相同.

我错过了什么似乎是"错误的"?

kol*_*aTM 6

你应该省略

if (!super.equals(obj))
{
return false;
 }
Run Code Online (Sandbox Code Playgroud)

因为那将使用默认的equals()方法(检查对象标识)