В каком случае вызов метода clone() или подобного прототипа создаст новый экземпляр объекта?

В Java метод clone() создаст новый экземпляр объекта, если класс реализует интерфейс Cloneable и переопределяет метод clone() из класса Object, вызывая super.clone().

Короткий ответ

Что ответить на собеседовании

В Java метод clone() создаст новый экземпляр объекта, если класс реализует интерфейс Cloneable и переопределяет метод clone() из класса Object, вызывая super.clone(). В этом случае создаётся поверхностная копия объекта — новый объект с теми же значениями полей. Если clone() не переопределён или класс не реализует Cloneable, вызов приведёт к CloneNotSupportedException.

Подробный разбор

Ответ с пояснениями

В Java метод clone() создаст новый экземпляр объекта, если класс реализует интерфейс Cloneable и переопределяет метод clone() из класса Object, вызывая super.clone(). В этом случае создаётся поверхностная копия объекта — новый объект с теми же значениями полей. Если clone() не переопределён или класс не реализует Cloneable, вызов приведёт к CloneNotSupportedException.

Пример:

class Person implements Cloneable {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone(); // создаёт новый экземпляр с копией полей
    }
}

Таким образом, новый экземпляр создаётся при корректной реализации clone() с вызовом super.clone(). Если метод реализован иначе или не вызывается super.clone(), новый объект может не создаваться.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее