首先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。