I think clone() is one of the most broken parts of
Java. It's just a mess. I'm pretty sure Sun wouldn't design it like it is, if they were able to start again now, but of course they can't change it now.
Personally, I prefer to avoid clone() as much as possible. One can often achieve the same sort of thing with just a little plain Java code, which will be much clearer.
YMMV.