Classes that implement this interface provide their instances with the ability to copy themselves in a manner similar to Cloneable objects, but without the drawbacks of Cloneable. Implementers need not return an object of their exact type, but the object they return should have all the same supertypes as the original object.