ADT的等价性是相对于客户端角度而言的,要么,两个对象通过AF映射到相同的抽象值,要么两个对象能作出效果相同的行为。不一定非得让rep完全一致。
所有对象都继承了Object.equals(),我们可以再类中重写它,从而定义直接的等价规则。注意equals()与==不是一回事,后者仅仅判断两个引用是否指向同一对象。如果不重写Object.equals(),那么默认效果与==相同。
便于理解equals()的例子:

由于equals的参数必须是Object,所有需要先检查类型是否匹配:

重载(overload)使同一个类中的多个方法可以又相投的名字,前提是他们又长度不同的参数列表,或者对应不同的参数类型,起码得让编译器在静态检查时能通过传入的参数判断出实际上该使用那个方法。重载可以发生在父类与子类之间,子类重载父类的方法。
注意重载的同名方法,并没有重写Object.equals:

(关键)注意下图中System.out.println()的两种不同结果,这是重载父类的equals()导致的:

本文探讨了如何在Java中通过重写Object.equals()定义对象间的等价性,以及重载equals方法的重要性。通过实例演示了等价规则的定制和System.out.println()中重载行为的影响。

被折叠的 条评论
为什么被折叠?



