Back to questions
Junior — Middle
62
Будет ли метод clone() работать при вызове на объекте класса Object без его переопределения?
Answer from AI
sobes.tech AI
Метод clone() определён в классе Object и по умолчанию реализует поверхностное копирование объекта. Однако, чтобы вызвать clone() на объекте, класс должен:
- Реализовывать интерфейс
Cloneable. Если этого не сделать, при вызовеclone()будет выброшено исключениеCloneNotSupportedException. - Переопределить метод
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 и переопределения, это не сработает.