Java 基于子类的哈希代码?

Java 基于子类的哈希代码?,java,inheritance,polymorphism,hashcode,Java,Inheritance,Polymorphism,Hashcode,可能是一个常见的问题,我不确定是否有Java解决方案 假设我们有A类、B类和C类,其中B和C扩展了A类 我们有一个 Set<A> Set A有一个基于A属性的简单哈希代码。我的问题是当我将B和C添加到集合中时,其中B和C可能具有与A相同的属性 显然,B有一些C没有的性质,C有一些B没有的性质。问题是我无法将B和C添加到集合中,因为它们的hashcode(使用A的hashcode函数)是相同的。出于某些原因(此处不作解释),我不允许从集合A中删除任何内容 我的问题是,我们有两个对象

可能是一个常见的问题,我不确定是否有Java解决方案

假设我们有A类、B类和C类,其中B和C扩展了A类

我们有一个

Set<A>
Set
A有一个基于A属性的简单哈希代码。我的问题是当我将B和C添加到集合中时,其中B和C可能具有与A相同的属性

显然,B有一些C没有的性质,C有一些B没有的性质。问题是我无法将B和C添加到集合中,因为它们的hashcode(使用A的hashcode函数)是相同的。出于某些原因(此处不作解释),我不允许从集合A中删除任何内容

我的问题是,我们有两个对象A,其中一个是B。但是,关于这个集合和它们的哈希代码,它们是相同的。我是否可以表示这两个As,即使它们的所有A属性都相同,实际上也不相同


如果A的hashcode函数可以基于其底层子类的实际情况,那就更好了。这可能吗?我的问题怎么解决

重写B和C中的hashCode和equals方法


通过这种方式,当哈希来比较它们时,它将包括它们的属性,并授权向下比较A中的属性。

覆盖hashCode和B和C中的equals方法


通过这种方式,当哈希来比较它们时,它将包括它们的属性,并授权向下比较A中的属性。

覆盖hashCode和B和C中的equals方法


通过这种方式,当哈希来比较它们时,它将包括它们的属性,并授权向下比较A中的属性。

覆盖hashCode和B和C中的equals方法

通过这种方式,当哈希来比较它们时,它将包括它们的属性,并授权向下比较A中的属性。

它将不仅仅基于哈希代码。它还将取决于
equals
的实现。听起来你应该在
B
C
以及
A
中重写
hashcode
等于
。。。您的
equals
方法可能应该检查
getClass()的结果。它还将取决于
equals
的实现。听起来你应该在
B
C
以及
A
中重写
hashcode
等于
。。。您的
equals
方法可能应该检查
getClass()的结果。它还将取决于
equals
的实现。听起来你应该在
B
C
以及
A
中重写
hashcode
等于
。。。您的
equals
方法可能应该检查
getClass()的结果。它还将取决于
equals
的实现。听起来你应该在
B
C
以及
A
中重写
hashcode
等于
。。。您的
equals
方法可能应该检查
getClass()的结果。