覆盖equals和hashcode?

时间:2015-02-09 19:03:08

标签: java

我有一套Car,其中Car类如下:

public class Car{

    private Tyre tyre;

    private Engine engine;

}

为了使用Set for car避免重复,我需要覆盖哈希码和等于Car类。我的问题是我还需要为Tire和Engine类实现equals和hashcode吗?

2 个答案:

答案 0 :(得分:4)

不,你没有。

如果两个Car s 的相等性取决于这些汽车所具有的TyreEngine的相等性,那么实施{{1} equalshashCode类的{}和Tyre方法以及从Engine的{​​{1}}和Car方法委派给它们的方法可能非常好主意。但是,如果以某种其他方式确定equals等式(例如汽车ID),那么hashCode的{​​{1}}或Car方法可能是完全合理的。和equals

答案 1 :(得分:2)

如果您将hashCode tyre engine hashCode Car方法hashCode Tyre方法用于Engine,则需要覆盖equals {1}}和tyre中也{1}}。如果您要使用engine equals Car equals Tyre方法Engine的{​​{1}}结果{},那么您需要覆盖{{1}} } {{1}}和{{1}}也是。