Can't remember the full details offhand, but you
implement the Cloneable interfaceOverride the clone() method, probably with public accessCall Foo fff = (Foo)super.clone(); in the clone methodThere are other bits I have forgotten.So you end up with the superclass' clone method being protected, but you can expose it as a public method.
Note that in
Effective Java (you might be able to find a sample chapter with clone() in), Joshua Bloch says the cloning mechanism was poorly designed.