The method clone() is declared protected in the Object class. Protected methods can be accessed from within the same package or from any subclass.
Obviously you are not in the same package, but you are a subclass of Object. HOWEVER, there is a caveat in this: a class can only access a protected members of a superclass on objects of its own class (or one of its subclasses).
Here's an example:
Which brings us to the next question: why doesn't the String class override the clone() method with a public version? Strings are immutable, and it would not make sense to make a copy of an immutable object. Say you have a string "abcde" somewhere in memory. Why would you want to have another string "abcde" in memory? You can not change the string anyway, so you can just assign the original reference.