Ang*_*era 1 java overriding equals object
好吧所以让我们说你有两个课:ClassA和ClassB
ClassA扩展Object和ClassB扩展ClassAClassA 没有参数构造函数ClassB 有一个整数变量x和一个带有一个初始化x的整数参数的构造函数ClassA不会覆盖equals它继承的ObjectClassB如果整数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字段相同.
我错过了什么似乎是"错误的"?
你应该省略
if (!super.equals(obj))
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
因为那将使用默认的equals()方法(检查对象标识)