Java 子类上的超类1唯一id中有2个可变变量。如何最好地重写equals和hashcode方法

Java 子类上的超类1唯一id中有2个可变变量。如何最好地重写equals和hashcode方法,java,equals,hashcode,Java,Equals,Hashcode,我有一个带int a和int b的超类。这些变量是可变的。这个超类有两个方法,可以为从它创建的任何对象实例更改int a和int b的值 我有一个子类继承自超类(extends),并重写了2个超类方法,以添加超类中缺少的改进功能。该子类有1个唯一id的实例变量。我想展示对超类和子类的equals和hashcode方法的重写。这可能不需要做,但我 我想为一个或两个类跳过equals和hashcode以适应我的情况 超类没有唯一的id实例变量。超类对象是唯一的,我想通过比较超类inta和intb与超

我有一个带int a和int b的超类。这些变量是可变的。这个超类有两个方法,可以为从它创建的任何对象实例更改int a和int b的值

我有一个子类继承自超类(extends),并重写了2个超类方法,以添加超类中缺少的改进功能。该子类有1个唯一id的实例变量。我想展示对超类和子类的equals和hashcode方法的重写。这可能不需要做,但我 我想为一个或两个类跳过equals和hashcode以适应我的情况

超类没有唯一的id实例变量。超类对象是唯一的,我想通过比较超类inta和intb与超类inta和intb的实例,在equals和hashcode方法中说明这一点。这是否可行?我不想使用默认的equals方法,该方法使用内存引用比较两个被比较对象的相等性

我还想使用Int c(unique id)、Int a和Int b作为unique来显示子类的对象 在equals方法中

我可以在超类equals和子类equals方法中进行相等性检查吗,还是有点毫无意义?我不想使用默认的内存引用检查,但想使用2个可变int变量(超类)和1个唯一id(子类)来显示相等性或唯一性

如果我在知道相等规则被破坏的情况下重写超类等于和子类等于,我是否仍然需要测试相等性

我可以重写supclass equals和hashcode方法吗,这对我的情况最合适吗


非常感谢任何帮助

这里基本上有两种不同的理念:

a) sub扩展了super,因此sub.equals()和sub.hashCode()都委托给super.equals()和super.hashCode()

b)每个类负责它自己的契约执行,Suffer等式()和子HASCODE()将通过GETTES(<代码> Super .GETXYZ()>代码>引用)来考虑父字段。 这两种方法都是有效的。在方法a)中,super.equals()将检查

实例的兼容性,在方法b)中,super.equals()将
this.getClass()
this.getClass()
进行比较。方法a)的问题在于,它会给您提供不对称的equals()比较。在某些情况下,sub.equals(super)将为假,但super.equals(sub)将为真


有关更多信息,请阅读的第8项和第9项。

我认为这里的信息太多,问题太多。我真的不明白你想做什么或者问题出在哪里。一些概述类之间差异的代码片段可能有助于澄清这种情况。对于子类,您说c是唯一的id,您有哪些检查可以确保无法使用相同的c创建多个实例,但a和/或b有所不同。c是唯一键这一事实可能只在您正在索引(例如在映射中)时才起作用,否则为什么您的子类在其equals()和hashcode()方法中甚至需要c是唯一键的概念?请记住,使用
instanceof
检查很可能会违反
equals
的对称属性。