为抽象类实现clone(),equals()或hashCode()是否有意义?

Mar*_*oma 5 java abstract-class clone equals hashcode

我是Java编程的导师.我的学生目前被迫(不是由我,但通过不明确的任务)为抽象类实现clone(),equals()hashCode().

为抽象类实现clone(),equals()或hashCode()是否有意义?你能给出一个有意义的例子吗?

我可以想象,当你有一个抽象类a的子类x,y,z时,它是有意义的.这些子类可能只在方法的实现上有所不同,因此您不需要三次实现这三种方法.但我无法想象任何可能出现这种情况的情况.

duf*_*ymo 4

我不会实施clone()

但实现equals()hashCode()、 和toString()为所有子类提供默认行为是有意义的。如果孩子没有添加新班级成员或根据需要补充,可以选择使用。

  • 我不同意实现 hashCode 和 equals 总是有意义的。既然你是一个抽象类,那么总会有一个子类。如果子类有任何实例状态,那么您的 hashCode 和 equals 就无济于事了——任何两个具有相同超类状态但不同子类状态的实例都会比较 equals!IMO,仅当您知道子类必须是什么样子时才实现 hashCode 和 equals,例如在 AbstractCollection 中。 (2认同)