You can override the clone method without implementing Cloneable
. Just call some copy constructor :
public class Foo {
private final int a;
private Foo(int a) {
this.a = a;
}
@Override
public Foo clone() {
return new Foo(this.a);
}
}