Object.clone()は、shallowCopyということもあって、
ObjectAの持つObjectBは参照のコピーになるそうですが、
再帰的に値をコピーしたいときは、Clonableの継承先でオーバーライドしたclone()内で、
さらに子階層の変数をclone()しないといけないのでしょうか?

だとすると、例ですが、
「「 ObjectAが持つ、ObjectB 」が持つObjectC 」が持つObjectD
※A, B, C, Dはそれぞれ別のクラス
まで複製したいといった場合には、Reflectionで複製した方が利口なのでしょうか?