Junior — Middle
Il metodo clone() funzionerà quando chiamato su un oggetto della classe Object senza essere sovrascritto?
sobes.tech AI
Risposta dell'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 и переопределения, это не сработает.