This week's book giveaway is in the OO, Patterns, UML and Refactoring forum. We're giving away four copies of Refactoring for Software Design Smells: Managing Technical Debt and have Girish Suryanarayana, Ganesh Samarthyam & Tushar Sharma on-line! See this thread for details.
Because Sun didn't want to make it public; that would mean that every single class would have a clone() method, even those that don't need one. Because it's protected, classes that want to have it can make it public (increase visibility), and call super.clone() to do the hard work. For instance, from java.util.Locale:
Here super.clone() is used to create a basic clone - an object of the exact same class with all fields copied directly. This is better than using "new Locale(...)" because sub classes couldn't call super.clone() anymore and get an object of that sub class.
Two more examples, from java.util.AbstractMap and java.util.HashMap (with HashMap extending AbstractMap):
AbstractMap calls super.clone() and then changes two references that were copied into null; after all, these two variables should not have shared values between two instances. HashMap calls super.clone() which returns a HashMap, because AbstractMap also used super.clone(). The rest of the method is making sure the original and the clone do not share objects but will contain the same key-value pairs.