Поскольку метод помечен как protected
в классе Object
, вы вообще не можете вызывать этот метод для произвольных объектов. Лично я не думал, что это поначалу будет проблемой (эй, я подкласс Object
, поэтому я должен иметь возможность вызывать его защищенные методы, верно?), Но компилятор должен знать, что вы ' является подклассом класса целевого объекта (или в его пакете) для вызова защищенных методов, ни один из которых здесь не применим.
Идея метода clone()
состоит в том, что классы, которые его поддерживают, переопределяют метод, объявляя его public
.
Единственное реальное решение, которое сохраняет полную функциональность, - это использование отражения для доступа к методу и обхода модификаторов доступа. Альтернативой может быть написание собственного MyCloneable
интерфейса, в котором объявлен public clone()
метод; это может сработать, если вы когда-либо будете передавать только свои собственные доменные классы, но это означает, что вы не можете использовать его на внешних классах (таких как java.util.String
или java.util.ArrayList
), поскольку вы не можете заставить их реализовать свой класс. интерфейс.
Согласно ответам на связанный вопрос , это очень сомнительный дизайн.