ADT的等价性与equals()在重载overload中的坑

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

ADT的等价性是相对于客户端角度而言的,要么,两个对象通过AF映射到相同的抽象值,要么两个对象能作出效果相同的行为。不一定非得让rep完全一致。

所有对象都继承了Object.equals(),我们可以再类中重写它,从而定义直接的等价规则。注意equals()与==不是一回事,后者仅仅判断两个引用是否指向同一对象。如果不重写Object.equals(),那么默认效果与==相同。

便于理解equals()的例子:

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

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

注意重载的同名方法,并没有重写Object.equals:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值