protected
– потому что универсальной реализации нет, а вызов приведет к CloneNotSupportedException
. Нужно писать свою реализацию, делать при этом ее public
и добавлять классу интерфейс Cloneable. Подразумевается что этот метод делает «глубокое копирование», то есть поля-ссылки копи будут вести на копии полей оригинала. Это диктуется соглашением, по которому клон не должен зависеть от оригинала. По контракту клон должен быть другим объектом (
!=
оригиналу). Рекомендуется, чтобы все классы иерархии реализовывали Cloneable
, реализация метода начиналась с super.clone()
(если родитель не Object
), а результат был equals
и имел тот же класс что и оригинал.Альтернативы (многие считают что более удобные) метода
clone
- конструктор копирования и паттерн factory method. Всё, что нужно знать о копировании объектов в Java можно найти в Effective Java Item 11.