Клонирование объекта бывает 2-х видов:
* Поверхностное (shadow);
* Глубокое (deep);
Чтобы объект можно было клонировать, он должен реализовывать интерфейс Сloneable (маркер). Использование интерфейса влияет на поведение метода (clone) родительского класса (Object). Таким образом, вызов метода MyType.clone() создаст новый представитель типа MyType. Это будет shadow клонирование:
Глубокое клонирование подразумевает клонирование ссылочных полей (клонировать объекты, на которые они ссылаются ) объекта. Это делается вручную.