есть два вопроса: во-первых, clone()
является protected
метод Object
, поэтому его можно назвать только из подкласса, если не переопределить его и сделать его общедоступным , Во-вторых, если ваш класс не реализует Cloneable
, вызов clone()
будет вызывать CloneNotSupportedException
. Типичный подход:
class A implements Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Impossible exception!", e);
}
}
}
(Вы могли бы устранить/поймать блок попробовать и объявить метод clone()
бросить CloneNotSupportedException
метод будет проще, но весь код, вызывающий будет иметь дело с исключением.).
Поскольку Java позволяет сократить тип возвращаемого значения при переопределении метода, вы можете переопределить clone()
вернуть A
, сохраняя код вызова от того, чтобы бросить:
class A implements Cloneable {
public A clone() {
try {
return (A) super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Impossible exception!", e);
}
}
}