Это связано с тем, что интерфейс Cloneable
является не обычным интерфейсом, а более или менее интерфейсом тегирования, который гарантирует JVM, что метод clone
класса, который его реализует, является допустимым и фактически работает.
Как указано в документации, интерфейс Cloneable
не объявляет сигнатуру метода clone
. Этот метод по своей природе наследуется в любом классе, который вы объявляете из класса Object
, но по умолчанию он равен protected
. Вот почему вы должны ослабить это ограничение, сделав его public
в среднем интерфейсе MyInterface
, который вы объявляете.
Взгляните на эту подсказку, приведенную в Java doc:
Обратите внимание, что этот интерфейс не содержит метод клонирования. Следовательно, невозможно клонировать объект только в силу того факта, что он реализует этот интерфейс. Даже если метод клона вызывается рефлексивно, нет никаких гарантий, что он будет успешным.