The java Manual says “By convention, classes that implement this interface should override Object.clone (which is protected) with a public method.”
Examples:
public class Foo implements Cloneable { @Override protected Object clone() throws CloneNotSupportedException { // Violation, must be public } } public class Foo implements Cloneable { @Override protected Foo clone() { // Violation, must be public } } public class Foo implements Cloneable { @Override public Object clone() // Ok }