たとえ implements Cloneableでも、Object#clone()がprotectedですので、結局
そのままじゃ呼べない場合が多いよ。
シャローコピー(フィールドの値のみコピー)をバシバシ作りたいクラスがあったら、
clone()をpublicでオーバーライドするとか、protectedであるclone()を呼び出す
publicメソッド作ってくだされい。

ディープコピー(オブジェクト参照のフィールドが指すオブジェクトも全て複製)した
いなら、Serialzableにして、1度バイトアレイにして作り直す手がありますね。
ですが、これはコピー対象のオブジェクトツリーすべてがSerialzableでないとだめぽ。

一方で、オブジェクトをコピーするくらいなら、同じプロパティでImmutableである
オブジェクトを新しく生成する、と言う方針にしてしまう方がプログラムが単純にな
ってよい場合も多いよ。性能要求がなければ、毎回newしてしまうようにしてしまう
べし。