Будет ли метод clone() работать при вызове на объекте класса Object без его переопределения?

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

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

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

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

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

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

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

  1. Реализовывать интерфейс Cloneable. Если этого не сделать, при вызове clone() будет выброшено исключение CloneNotSupportedException.
  2. Переопределить метод clone() с модификатором доступа public (в Object он protected), чтобы сделать его доступным извне.

Если класс не переопределяет clone() и не реализует Cloneable, вызов clone() на объекте этого класса приведёт к исключению.

Пример:

class MyClass implements Cloneable {
    int value;

    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone(); // поверхностное копирование
    }
}

MyClass obj = new MyClass();
MyClass copy = (MyClass) obj.clone();

Если же вызвать clone() на объекте класса Object напрямую, без реализации Cloneable и переопределения, это не сработает.

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

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

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

Подробнее