Джош Блох в Effective Java также не рекомендует использовать метод clone ().
Есть несколько проблем с этим методом:
1) Если клонируемый объект имеет не только поля примитивного типа, но и поля объекта, то клонированный объект будет получать только ссылки на эти объекты, но не реальные клонированные объекты. Чтобы избежать этого, все внутренние объекты тоже должны быть клонируемыми.
2) Если вы создаете подкласс клонируемого класса, то он тоже клонируемый (даже если вы не хотите). Вот почему вы должны корректно переопределить метод clone (), чтобы избежать возможных проблем.
Когда вы должны его использовать: никогда, если это возможно. Вы должны использовать это очень осторожно. Если все поля в объекте, который вы хотите сделать клонируемым, имеют примитивный тип, то это не опасно. Во всех остальных случаях дважды подумайте, прежде чем его использовать.