I see why clone in Java was badly designed, since the interface defined no obvious contract, but I dont understand why the clone() method in Cloneable is protected. I want to have a method accept a Cloneable and then clone it, thats the whole point of a contract? Why make such a contract protected?