nitul.kukadia wrote:Who cares about the why? What matters is that it is like the way it is and it is not going to change. Only the people who designed it can really answer it; that was more than 15 years ago. I'm pretty sure that if you asked those people in an interview today they'd answer "yeah, I would do it differently today".
There have been other questions similar to this: Why is #clone() not in the Cloneable interface? and others.
But this question is not the same or duplicate. It tries to go in the logical aspects of what wrong would happen if something other than this would have been done.
Question 1) Why Cloneable interface at the first place ?
Question 2) Why is Cloneable interface marker interface or why not keep clone() method in it ?No need; all objects inherit from Object and Object has the clone() method.
Question 3) Why not create a Cloneable class rather than markable interface ?Because you can extend only one class and implement many interfaces. Making it a class would severely limit you. Making it a class would not change anything anyway - it would still be empty.
Question 4) Why is default implementation of clone() method in Object ?Convenience? Basically the same as 1), the why can only really be answered by the people who designed it.
Question 5) So why is clone() method protected in Object ?Again a why. Because some group of people decided that it should be so.