Это была ошибка проектирования в Java (да, Java не идеальна!).
Лучше избегать клонирования в Java. Например, Джош Блох указывает в «Эффективной Java», пункт 11:
Интерфейс Cloneable был задуман как смешанный интерфейс (элемент 18)
для объектов, чтобы рекламировать, что они разрешают клонирование. К сожалению это
не в состоянии служить этой цели. Его основной недостаток в том, что ему не хватает клона
метод, и метод клона объекта защищен. Вы не можете без
прибегая к рефлексии (пункт 53), вызовите метод клонирования на
объект только потому, что он реализует Cloneable. Даже рефлексивный
вызов может завершиться неудачей, так как нет гарантии, что объект имеет
доступный метод клонирования. Несмотря на этот недостаток и другие, средство является
в широком использовании, так что стоит понять это.
Если вы хотите, чтобы ваши объекты были клонируемыми, используйте конструктор копирования или метод копирования.