Java SE. Урок 25. Клонирование объектов

preview_player
Показать описание
Передавая ссылку на объект в метод, мы продолжаем работать с текущим объектом, просто на него указывает уже 2 ссылки. Для защиты первичного объекта (если это необходимо) следует создать клон данного объекта, для этого:
1. Необходимо переопределить метод clone() с protected на public, для возможности вызова из другого пакета.
2. Класс должен реализовывать интерфейс Cloneable, который относиться к интерфейсам маркерам или меткам (не содержит методов необходимых для переопределения)

Для глубокого клонирования (полного клонирования) объекта, содержимое данного класса (его поля), также должны реализовывать интерфейс Cloneable. К данным полям не относятся поля примитивных типов, их оболочек, а также классы, объекты которых относятся к неизменяемым объектным типам.
Рекомендации по теме
Комментарии
Автор

Ну хорошо что клонировали sheet а не shit.

РудольфАбель-вф
Автор

Тема глубокого клонирования в видео практически не раскрыта, при глубоком клонировании необходимо также клонировать все поля-объекты клонируемого объекта своими методами clone(), иначе в объекте-клоне ссылки на эти объекты останутся теми же, что и в исходном объекте со всеми вытекающими последствиями.

B__B__B
Автор

Некорректно/ неполно обьяснены понятия и механизмы реализации глубокого (deep) и поверхностного (shallow) клонирования. Нужно отметить, что метод clone() класса Object создаёт только поверхостную копию обьекта. Если клонируемый объект имеет ссылочные поля (ссылки на другие объекты), то в объект-клон копируются ссылки. Ссылаемыеобъекты не клонируются. Таким образом объекты оригинал и клон ссылаются на одни и теже сторонние объекты. При изменении состояния этих объектов, данные изменения будут видны как в оригинале так и в клоне. Это и есть сущность поверхностного клонирования. Видео нужно переделать или удалить. Нельзя людей учить, что 2+2=22.

ab
Автор

Очень сумбурное объяснение именно в этом уроке. Много исправлений самого себя, перепрыгивание с темы на тему, без гугла дополнительного разъяснения не получится въехать в тему. Использование команд которые ще не прошли все еще усложняет. А если, судя по комментариям, клонирование очень узконаправленная штука и почти не используется, зачем давать ее в обучении? Думаю вы не много потеряете если не будете забивать голову этим [раньше времени].

opersk
Автор

Все время смотрел клонирование, но так и понял зачем нам клонировать объект? После изучения pass by value vs reference и того, как хранятся наши объекты в heap, уже все стало понятно) Даже один раз в практике был случай, где не смог обойти без клонирования.

haykmkrtchyan
Автор

Выражаю огромную благодарность! Твои уроки реально нереально выручают! ))

sva
Автор

Хорошие видео, максимальный объем информации за минимальное время. Sheet = Лист;

antonkravtsov
Автор

У меня одного на этом видео качество 360 с телефона?

myernie
Автор

Посмотрев урок подумал, что получится не клон, а другой новый объект. Когда написал программу оказалось, что все же получается клон, но почему не понятно. Каким образом super.clone() в переопределении метода clone() копирует значение поля name? Откуда класс Object знает о существовании поля name в своем потомке?

ХединДобрый
Автор

Все понятно, непонятно зачем мы клонировали, все равно в единственное поле мы ему насетили имя, а если его не сетить, то я проверил выводит в консоль null у второй овцы.
Я в начале видео подумал что полезная функция, если нужно будет создать объект имеющий точно такое же состояние полей, но в итоге как я понял поле name не скопировало имя первой овцы. Тогда непонятно какая цель клонирования?

АндрейМирошниченко-вы
Автор

Почему было не реализовать клонирование прямо в методе овцы? Чтобы он либо получал на вход овцу и возвращал ее полный клон, либо просто возвращал при вызове его с объекта.
Городить foo в main чисто для овцы кажется излишним. Если бы клон работал универсально на все объекты программы, тогда да.

nmodonov
Автор

Насколько знаю в конце не ошибка должна была вылететь, а просто у двух овец одна голова на двоих.

АлексейДогачев
Автор

У меня копии присваивается ссылка старого объекта, и изменяя копию меняется оригинал ;(

junveld
Автор

Будет немного запутано... ну да, как бы ни так. Столько новой информации, какие-то системные интерфейсы, трай кетчи, о которых раньше не говорилось. Совсем немного запутано. Самую малость)) Я тут что, один ничего не понял после первого просмотра?

podpalmoi
Автор

Не бывает проблем с клонированием пустых голов )))

otshelmynik
Автор

учусь по Вашим видео. Спасибо! Но про clone() Вы, конечно, очень непонятно объяснили... буду искать иной источник подачи информации)

ARSstudioful
Автор

opiat mysli chitat eto delaetsa dlia togo- potomu cto etot metot private. nixera neponiatno.

Rotiminas
Автор

Честно хз кто оставляет комменты с похвалой, я смотрю 25й урок и автор вообще не умеет донести и объяснить информацию новичку, плейлист создан для начинающий в Java, но пацан просто тупо инфу льет водой, притом во время писанины куча ошибок поправок и переисправлений, что уже путает и так закипевший мозг от новой непонятной инфы!!Просто капец, думал может я не шарю, но данные уроки могут пригодится может в том случае, когда ты на практике в работе столкнулся с теми или иными вопросами, но никак когда ты с нуля учишь Java. Еще убивает что автор курсы по обучению платные ведет, не имея навыка учить правильно!

saimonstout
Автор

Неужели за столько лет не нашлось ни 1 душнилы, который бы сказал, что правильно SHEEP, а не SHEET)

Golod
Автор

Использование clone() и Cloneable не рекомендуется более.

igoraleksandrovich