путаница в отношении clone (), класса объектов и интерфейса Clonable в Java - PullRequest
0 голосов
/ 07 января 2020

Если clone() является частью класса Object, то почему мы должны реализовать интерфейс Clonable для использования clone()?

Я прочитал, что clone() является защищенным членом Object, тогда какова связь между clone() и Clonable интерфейсом. Извините, если я звучу глупо. Я только начал изучать Java.

Ответы [ 2 ]

2 голосов
/ 07 января 2020

Cloneable - интерфейс маркера. У него нет никаких методов. Просто добавьте в белый список ваш класс, чтобы сделать Cloneable

From docs

Класс реализует интерфейс Cloneable для указания на Object.clone () метод, который является допустимым для этого метода, чтобы сделать копию поля для поля экземпляров этого класса. При вызове метода клонирования Object в экземпляре, который не реализует интерфейс Cloneable, создается исключение CloneNotSupportedException.

1 голос
/ 07 января 2020

Настоятельно не рекомендуется использовать clone (). Я не буду углубляться в go, так как это не так. c, но если вам нужны дополнительные данные, пожалуйста, проверьте, есть ли у Effective Java. Read Item 11: "Override clone judiciously".

Object.clone() реализация. Это делает поверхностную копию объекта, если объект реализует Cloneable.

Метод .clone() не принадлежит ни одному интерфейсу.

Метод .clone() и реализация интерфейса Cloneable - это совершенно разные вещи.

Вам необходимо реализовать интерфейс Cloneable, только если вы собираетесь использовать метод клона Object

...