基类不定义等于但子类需要.如何实施?

maf*_*lda 3 java methods equals hashcode

我无权访问基类代码.但是需要能够在子类中定义equals,同时考虑一些基类属性.

此外,基类没有受保护的字段.所有字段只能通过访问者/ mutator访问.

仅仅对子类等于的基类字段进行比较会被认为是不好的吗?为什么?

我需要这样做,因为我的基类有一个默认等于不适用于我的目的,但它也有一些字段,当做一个子类等于时需要考虑...

Mat*_*ard 6

是的,您可以这样做,在您的超类中调用getter不会有任何问题,因为您可以按照您想要的方式确定相等,只要您遵循合同:

反身:x.equals(x)应该返回true.

对称:x.equals(y)== y.equals(x)

传递:x.equals(y)&& y.equals(z)=> x.equals(z)

一致:除非x或y在调用之间发生变异,否则x.equals(y)的多次调用始终返回true或false.

和equals-hashcode合约:

等于对象必须具有相同的哈希码

http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#equals(java.lang.Object)