java - 基类没有定义 equals 但子类需要定义。如何实现?

标签 java methods equals hashcode

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

此外,基类没有 protected 字段。所有字段只能通过访问器/修改器访问。

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

我需要这样做,因为我的基类有一个默认的 equals,它不适合我的目的,但它也有在做子类 equals 时需要考虑的字段......

最佳答案

是的,你可以这样做,在你的父类(super class)中调用 getter 不会有任何问题,因为你可以用任何你想要的方式确定相等性,只要你遵守约定:

Reflexive: x.equals(x) should return true.

Symmetric: x.equals(y) == y.equals(x)

Transitive: x.equals(y) && y.equals(z) => x.equals(z)

Consistent: Multiple invocations of x.equals(y) consistently return true or false unless x or y is mutated between calls.

以及 equals-hashcode 契约:

Equal objects must have equal hashcodes

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

关于java - 基类没有定义 equals 但子类需要定义。如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5034255/

相关文章:

java - HashMap 和 SortedMap 中 equals() 的复杂性

java - elasticsearch 未启动 {0.90.0} : Startup Failed

Java 8 流 : can you capture/reuse a value calculated in a filter?

java - spring boot sql数据库DML和DDL脚本

ruby-on-rails - 在 Controller 中扩展一个 Action

java - 哈希集如何检查重复元素?

Java 的 equals 和 hashmap 问题

java自定义类型之间的转换

java - 错误找不到符号 - Java 类和方法

c# - 除了默认构造函数给出的内容之外,无法返回任何内容