2015-07-09 2 views
1

Что я понял из Why is the clone() method protected in java.lang.Object?, так как мы не клонируем сам объект и не используем клонирование в любом подклассе, нам нужно переопределить его, но что, если объект содержит общедоступный метод клонирования? мы все равно должны переопределить его в подклассе, чтобы использовать его.Почему метод клонирования объекта защищен не публично?

Редактирование: На вопросе Why is the clone() method protected in java.lang.Object? людей, объясняющие, почему мы защитили метод клонирования в классе Object, но мой вопрос, если метод в классе общественного клон вместо защищенного клона нам еще нужно реализующие Клонируемым интерфейс в подклассе, чтобы использовать клонирование. Итак, почему у нас нет общественный метод вместо этого у нас есть protected.

+0

Да, в этом случае вам также необходимо объявить любую переопределяющую публикацию. Это проблема для вас? – Sneftel

+0

Нет, я в замешательстве, почему у нас есть подпись в классе Object, т.е. ** protected native Object clone() throws CloneNotSupportedException ** и почему бы не ** public native Object clone() throws CloneNotSupportedException ** –

+0

Вы смущены вопросом о том, что вы связано? Или что вам нужно делать, если вы хотите использовать общедоступный метод клонирования? –

ответ

1

Вы не всегда хотите, чтобы ваши объекты были клонированы. Иногда у вас есть классы , которые представляют что-то, что не должно быть клонимым.

К сожалению, разработчики языка Java использовали необычный дизайн , когда они добавили эту функцию в класс Object. Существует защищенный метод clone(), который генерирует исключение CloneNotSupportedException, если только класс не реализует интерфейс Cloneable. Интерфейс Cloneable является маркером интерфейса (интерфейс без каких-либо методов - его единственная цель - указать, что класс, который его реализует, разрешен к клонированию). Если вы хотите, вы можете переопределить метод clone() в своем классе, а сделать его общедоступным.