TGViewer
Java | Вопросы собесов Java | Вопросы собесов @easy_java_ru · 11.3K subscribers
Post #116 6.56K
Что знаешь о методе clone ?
Спросят с вероятностью 12%

Метод clone() используется для создания копии существующего объекта. Он определён в классе Object и может быть переопределён в пользовательских классах для реализации более глубокого или специфического клонирования, в отличие от поверхностного копирования, предоставляемого реализацией по умолчанию.

Особенности метода:

✅Поверхностное копирование: Он выполняет поверхностное копирование объекта. Это означает, что копируются только значения примитивных полей и ссылки на объекты, но не сами объекты, на которые эти ссылки указывают. Если объект содержит ссылки на другие объекты, то в копии эти ссылки будут указывать на те же объекты, что и в оригинале.

✅Класс должен реализовать интерфейс Cloneable: Чтобы объект класса мог быть клонирован с использованием метода clone(), этот класс должен реализовать интерфейс Cloneable. Интерфейс Cloneable не содержит методов и служит маркером, указывающим, что класс разрешает клонирование. Если объект класса, который не реализует Cloneable, пытается использовать метод clone(), будет выброшено исключение CloneNotSupportedException.

✅Переопределение методахностное ко Для реализации глубокого клонирования или специфической логики клонирования метод clone() может быть переопределён. При переопределении рекомендуется вызывать super.clone() для получения объекта, а затем выполнять копирование внутренних объектов или выполнение дополнительных действий.

Пример:
public class Sheep implements Cloneable {
private String name;

public Sheep(String name) {
this.name = name;
}

// Геттеры и сеттеры

@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

public class CloneExample {
public static void main(String[] args) {
Sheep original = new Sheep("Dolly");
Sheep copy = null;
try {
copy = (Sheep) original.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
System.out.println(original != copy); // Выведет true, так как это разные объекты
System.out.println(original.getClass() == copy.getClass()); // Выведет true, так как тип один и тот же
System.out.println(original.equals(copy)); // Результат зависит от реализации метода equals()
}
}


Метод clone() позволяет создавать копии объектов, но его использование требует осторожности, особенно при работе с объектами, содержащими ссылки на другие объекты (глубокое и поверхностное клонирование). Необходимость реализации интерфейса Cloneable и обработки исключения CloneNotSupportedException делает использование метода clone() менее удобным по сравнению с другими подходами к клонированию, такими как конструкторы копирования или фабричные методы.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1715 вопроса на Java разработчика. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
  • 👍 20
More from @easy_java_ru
  1. Oct 13, 2026🤔 Так ли хороша синхронизация при помощи synchronized? Плюсы: - просто и понятно; - встро…
  2. Oct 13, 2026🤔 Что за исключение Interrupted Exception? InterruptedException — это проверяемое исключе…
  3. Oct 13, 2026Post #2963
  4. Oct 12, 2026🤔 Жизненный цикл сервлетов? 1. Загрузка и инициализация (init); 2. Обработка запроса (ser…
  5. Oct 12, 2026🤔 Как остановить поток? Остановить поток в Java можно несколькими способами, но важно пом…
  6. Oct 11, 2026🤔 Какой класс позволяет читать данные из входного байтового потока в формате примитивных…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →