Sobes.tech
Назад к вопросам
Junior — Middle
61

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

Ответ от нейросети

sobes.tech AI

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

  1. Реализовывать интерфейс Cloneable. Если этого не сделать, при вызове clone() будет выброшено исключение CloneNotSupportedException.
  2. Переопределить метод clone() с модификатором доступа publicObject он 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 и переопределения, это не сработает.