Клонування об'єкта – це спосіб створити точну копію об'єкта.
Для клонування об'єкта Java можна використовувати п'ять способів:
1. Перевизначити метод clone() класу Object та реалізувати інтерфейс Cloneable;
2. Використовувати конструктор копіювання;
3. Використовувати статичний фабричний метод, що повертає екземпляр
свого класу;
4. Використовувати механізм рефлексії;
5. Використовувати механізм серіалізації.
Типи клонування
1. Поверхневе (shallow):
• У цьому випадку копіюються значення простих полів та посилальні значення.
2. Глибоке (deep):
• Повне копіювання, при якому поля посилальних (об'єктних) типів також схиляються, тобто створено нові, але еквівалентні екземпляри полів.
Поверхневе клонування
Метод clone() класу Object використовує поверхневе клонування.
Клас Object містить protected-метод clone(), що здійснює побітове копіювання об'єкта похідного класу:
• Спочатку необхідно перевизначити метод clone() як public для забезпечення можливості виклику з іншого пакета.
• У перевизначеному методі слід викликати базову версію методу super.clone(), яка і виконує власне клонування.
• Щоб остаточно зробити об'єкт клонованим, клас має реалізувати інтерфейс Cloneable.
Поверхневе та Глибоке клонування