yog*_*cak 5 java inheritance equals
我是 Java 编程的初学者。目前我正在阅读有关继承和equals方法这个页面。我理解的解释直到这一点:
比较 this 和 otherObject 的类。如果子类中 equals 的语义可以改变,请使用getClass测试:
if (getClass() != otherObject.getClass()) return false;
Run Code Online (Sandbox Code Playgroud)
如果所有子类都具有相同的语义,则可以使用instanceof测试:
if (!(otherObject instanceof ClassName)) return false;
Run Code Online (Sandbox Code Playgroud)
我不明白“平等的语义”是什么意思。有人可以分享我们使用 getClass() 和 instanceof 的场景吗?
感谢您的阅读。
小智 3
简单地说,getClass() 返回对象的直接类。例如,
class A { }
class B extends A { }
Run Code Online (Sandbox Code Playgroud)
如果我们从 A 和 B 创建两个对象,
A objA = new A();
B objB = new B();
Run Code Online (Sandbox Code Playgroud)
现在我们可以检查 getClass 是如何工作的
System.out.println(objA.getClass()); //Prints "class A"
System.out.println(objB.getClass()); //Prints "class B"
Run Code Online (Sandbox Code Playgroud)
所以,
objA.getClass() == objB.getClass()
Run Code Online (Sandbox Code Playgroud)
返回假。但
System.out.println(objB instanceof A); //Prints true
Run Code Online (Sandbox Code Playgroud)
这是因为即使给出了所提供对象的超类,instanceof也会返回true。
因此,当您设计 equals() 方法时,如果您想检查给定对象(otherObject)是否从同一个直接类实例化,请使用
if (getClass() != otherObject.getClass()) return false;
Run Code Online (Sandbox Code Playgroud)
如果给定的对象(otherObject)甚至可以从您提供的类(ClassName)的子类中创建,请使用
if (!(otherObject instanceof ClassName)) return false;
Run Code Online (Sandbox Code Playgroud)
简单地说,“equals 的语义”意味着“您期望 equals() 方法达到的目的”。所以你可以根据你的需要使用合适的方法。
| 归档时间: |
|
| 查看次数: |
441 次 |
| 最近记录: |