为什么只有克隆和完成是对象校准中的受保护方法?

时间:2018-11-22 10:58:25

标签: java object equals hashcode protected

我了解将clone和finalize方法设置为受保护的目的,我想了解为什么hashcode()和equals方法未声明为受保护的

2 个答案:

答案 0 :(得分:6)

因为您要从该给定类的外部调用hashcodeequals方法。

protected仅允许从相同的程序包和扩展类进行访问。

答案 1 :(得分:1)

您“了解将克隆和finalize方法设为受保护的目的”。但是实际上目的是什么?

如果未重写方法且未实现Object.clone,则调用Cloneable将引发异常。因此,该方法尚无法使用。

Object.finalize根据JavaDoc“由垃圾收集器调用”。因此,仅用于内部使用。

与这两种方法相比,Object.equalsObject.hashCode可以随时使用,不能内部使用。

Object.hashCode的{​​{3}}说:

  

支持此方法是为了使哈希表(例如那些哈希表)受益   由HashMap提供。

因此,它打算供其他对象使用。如果不声明hashCode,则public的使用将受到限制。

Object.equals是一种JavaDoc方法。如果Object.equals不会被声明为public,则假设我们有一个本地变量b,该变量来自另一个包,并且{{1} }}。如果equalsthis相等,我们要取消。我们无法致电b,但仍然可以致电this。将对称方法限制为只能被两个对象之一调用是否有意义?
另请参见b != null && b.equals(this)