Notes

The Object class defines a protected clone() method. Since the clone() method is protected, an object of a class C cannot call the clone() method of an object of an unrelated class C'. If this is desired, class C' must override the clone() with public access.

If you want to clone an object of a class C, the class C must implement the Cloneable interface. This interface is a Marker. If the class does not implement the Cloneable interface, when the clone() method executes it throws the CloneNotSupportedException exception.