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
}