Sobes.tech
Junior — Middle

O método clone() funcionará ao ser chamado num objeto da classe Object sem sua redefinição?

sobes.tech IA

Resposta da IA

Метод 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 и переопределения, это не сработает.