我了解将clone和finalize方法设置为受保护的目的,我想了解为什么hashcode()和equals方法未声明为受保护的
答案 0 :(得分:6)
因为您要从该给定类的外部调用hashcode
和equals
方法。
protected
仅允许从相同的程序包和扩展类进行访问。
答案 1 :(得分:1)
您“了解将克隆和finalize方法设为受保护的目的”。但是实际上目的是什么?
如果未重写方法且未实现Object.clone
,则调用Cloneable
将引发异常。因此,该方法尚无法使用。
Object.finalize
根据JavaDoc“由垃圾收集器调用”。因此,仅用于内部使用。
与这两种方法相比,Object.equals
和Object.hashCode
可以随时使用,不能内部使用。
Object.hashCode
的{{3}}说:
支持此方法是为了使哈希表(例如那些哈希表)受益 由
HashMap
提供。
因此,它打算供其他对象使用。如果不声明hashCode
,则public
的使用将受到限制。
Object.equals
是一种JavaDoc方法。如果Object.equals
不会被声明为public
,则假设我们有一个本地变量b
,该变量来自另一个包,并且{{1} }}。如果equals
和this
相等,我们要取消。我们无法致电b
,但仍然可以致电this
。将对称方法限制为只能被两个对象之一调用是否有意义?
另请参见b != null && b.equals(this)
。