почему только клон и финализация являются защищенным методом в объекте calss? - PullRequest
0 голосов
/ 22 ноября 2018

Я понимаю цель сделать метод клонирования и финализации как защищенный, я хотел понять, почему hashcode () и метод equals не объявлены как защищенные

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Вы «понимаете цель создания клона и финализируете метод как защищенный».Но какова цель на самом деле?

Вызов 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.

0 голосов
/ 22 ноября 2018

Поскольку вы хотите вызывать методы hashcode и equals извне этого заданного класса.

protected разрешает доступ только из одного пакета и расширенных классов.

...