Вы «понимаете цель создания клона и финализируете метод как защищенный».Но какова цель на самом деле?
Вызов Object.clone
вызовет исключение, если метод не переопределен и если Cloneable
не реализован.Таким образом, этот метод не готов к использованию.
Object.finalize
в соответствии с JavaDoc , "вызванным сборщиком мусора".Таким образом, это только для внутреннего использования.
В отличие от этих обоих методов Object.equals
и Object.hashCode
готовы к использованию, а не для внутреннего использования.
JavaDoc из Object.hashCode
говорит:
Этот метод поддерживается для использования хеш-таблиц, таких как предоставленные HashMap
.
Таким образом, он предназначен для использования другими объектами.Если hashCode
не будет объявлено public
, эта функциональность будет ограничена в использовании.
Object.equals
- это симметричный метод.Если Object.equals
не будет объявлено public
, предположим, что у нас есть локальная переменная b
типа из другого пакета и чей метод equals
не виден для this
.Мы хотим проверить, если b
и this
равны.Мы не могли позвонить b != null && b.equals(this)
, но мы все еще могли позвонить this.equals(b)
.Имеет ли смысл ограничивать симметрический метод для вызова только одним из обоих объектов?
См. Также Comparable
.