Защищенный объект clone () -
Создает и возвращает копию этого объекта.Точное значение «копия» может зависеть от класса объекта.Общее намерение состоит в том, что для любого объекта x выражение:
x.clone ()! = X
будет истинным, а выражение:
x.clone (). getClass () == x.getClass ()
будет иметь значение true, но это не абсолютные требования.Хотя обычно это так: x.clone (). Equals (x) будет истинным, это не является абсолютным требованием.По соглашению, возвращаемый объект должен быть получен путем вызова super.clone.Если класс и все его суперклассы (кроме Object) подчиняются этому соглашению, то будет
x.clone (). GetClass () == x.getClass ().
По соглашению объект, возвращаемый этим методом, должен быть независимым от этого объекта (который клонируется).
Для достижения этой независимости может потребоваться изменить одно или несколько полей объектавозвращается super.clone до его возвращения.Как правило, это означает копирование любых изменяемых объектов, которые составляют внутреннюю «глубокую структуру» клонируемого объекта, и замену ссылок на эти объекты ссылками на копии.Если класс содержит только примитивные поля или ссылки на неизменяемые объекты, то обычно случается, что нет необходимости изменять поля в объекте, возвращаемом super.clone.
Имеется в виду, когда выу вас есть подобъект в вашем объекте, вы не должны просто клонировать / копировать его ссылку, но внутреннюю структуру этого объекта (для создания его нового экземпляра), если каждый объект имеет свой метод clean clone ()сможет клонировать его, как родительский объект, в противном случае вам придется создать новый экземпляр этого объекта и скопировать его внутренние примитивные поля по одному.