Главная » Java » Простое и глубокое клонирование Java

0

Реализацию функций клонирования, предусмотренную по умолчанию в классе Object, принято обозначать термином простое (или мелкое – shallow) клонирование – выполняется обычное копирование полей из одного объекта в другой. В процессе глубокого (deep) клонирования соответствующие методы clone вызываются для каждого объекта, обозначенного переменной-полем, и каждого элемента массива объектов. Процесс носит рекурсивный характер – клонированию подвергаются все объекты, служащие членами других объектов, начиная от текущего. Глубокое клонирование, предусматривающее необходимость переопределения методов clone, обычно при меняется в тех случаях, когда функций простого клонирования недостаточно (как в примере класса IntegerStack, рассмотренном выше).

Здесь уместно вкратце сказать и о другом механизме, реализованном в Java, который имеет отношение к обсуждаемой теме. Речь идет о средствах сериализации (serialization) объектов (за информацией обращайтесь к разделу 15.7 на Странице 418), позволяющих представить объект любого уровня сложности в виде последовательности байтов данных, а затем при необходимости восстановить объект на основе его байтового представления. Функции сериализации способны обеспечить получение более "глубоких" копий объектов в сравнении с теми, которые создаются посредством Object. Clone.

Упражнение 3.8. Реализуйте в классах Vehicle и PassengerVehicle интерфейс Cloneable. К какой из четырех категорий, в зависимости от уровня поддержки функций клонирования, следует отнести классы Vehicle и Passengervehicle? Будет ли достаточно для них ограничиться методом Object.clone, реализующим простое клонирование?

Упражнение 3.9. Создайте класс Garage (гараж) И предусмотрите в нем средства хранения массива ссылок на объекты типа Vehicle. Обеспечьте реализацию интерфейса Cloneable и напишите соответствующий метод clone. Включите в состав класса метод main, с помощью которого протестируйте решения.

 

Источник: Арнолд, Кен, Гослинг, Джеймс, Холмс, Дэвид. Язык программирования Java. 3-е изд .. : Пер. с англ. – М. : Издательский дом «Вильяме», 2001. – 624 с. : ил. – Парал. тит. англ.

По теме:

  • Комментарии