首先Java语言规范要求equals方法满足自反性、对称性、传递性、一致性、显参为null时返回false。
假定e为Employee类创建的对象,m为Manager类创建的对象,Mnager类是Employee类的子类,且在实例域中新增了实例变量bonus,两个对象的实例域除了bonues外都相同。
假如用instanceof编写Emplyee类中的equals方法,那么e.equals(m),m instanceof Employee,都将返回true,那么根据对称性,m.equals(e)也只能返回true,这说明用Manager对象调用equals方法时会忽视bonus的存在,认为其与相等测试无关。
如果相等测试与bonus有关,则只能在equals中用getClass来编写而不能用instanceof。
本文讨论了Java语言规范中equals方法的特性,特别是自反性、对称性等,并通过Employee和Manager类的具体示例,解释了如何正确实现equals方法以避免继承带来的问题。
421

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



