Попытка вызвать метод clone для класса, который не реализует Cloneable, создает исключение CloneNotSupported, и ни один класс Object не реализует Cloneable.
вот код Javadoc из метода клона класса Object
CloneNotSupportedException if the object's class does not
* support the <code>Cloneable</code> interface. Subclasses
* that override the <code>clone</code> method can also
* throw this exception to indicate that an instance cannot
* be cloned.
Кроме того, метод Object # clone защищен, поэтому вам необходимо реализовать метод clone в вашем классе и сделать его общедоступным, чтобы он мог быть доступен для классов, создающих объекты вашего класса, которые затем могут вызывать clone. Хорошим примером является способ реализации клона в ArrayList
ArrayList реализует клонируемый, как показано ниже
открытый класс ArrayList расширяет AbstractList
реализует List, RandomAccess, Cloneable, java.io.Serializable
и затем реализует метод клонирования:
/**
* Returns a shallow copy of this <tt>ArrayList</tt> instance. (The
* elements themselves are not copied.)
*
* @return a clone of this <tt>ArrayList</tt> instance
*/
public Object clone() {
try {
ArrayList<E> v = (ArrayList<E>) super.clone();
v.elementData = Arrays.copyOf(elementData, size);
v.modCount = 0;
return v;
} catch (CloneNotSupportedException e) {
// this shouldn't happen, since we are Cloneable
throw new InternalError();
}
}