File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Java in General and the fly likes Cloning in java Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Java in General
Bookmark "Cloning in java" Watch "Cloning in java" New topic

Cloning in java

Ritu Kapoor
Ranch Hand

Joined: Oct 03, 2004
Posts: 102
We have a clone() defined in Object class. If we try to execute a class overriding clone(), it throws CloneNotSupportedException. But if we implement Cloneable interface(which is a marker interface), everything goes fine. Now the question is, why do not we have a clone() in Cloneable interface rather then in Object class.

Is it in the Object only because we require a default implementation of a clone() and since Object is the superclass, so we cannot somehow implement that interface in Object class. But then Why do we require a Cloneable Interface at all. We can override its implementation in our subclass also.

Kindly help me to clarify my doubts
Rob Spoor

Joined: Oct 27, 2005
Posts: 20269

As you said, it is in Object so there is a basic implementation. This will copy all fields for you. This is protected so you can't just try to clone() every single object, not expecting the CloneNotSupportedException.

Now I too have asked myself why Cloneable does not declare the clone() method, but the reason is quite clear: it requires the clone() method to become public. However, sometimes you want to use clone() internally only, so you want it to remain protected. If Cloneable would declare clone() that would not be allowed.

Now the Cloneable interface does have a reason: just like Serializable, it is a marker class that the JVM will use internally. Without implementing Serializable, you cannot write the object to ObjectOutputStreams. Without implementing Cloneable, you cannot clone the object.

How To Ask Questions How To Answer Questions
Peter Chase
Ranch Hand

Joined: Oct 30, 2001
Posts: 1970
The Cloneable interface is one of the oldest parts of Java. It is not a good example of modern Java design. So, basically, if you need its facilities, you should just learn to use it. But you should not expect particularly satisfactory answers to the "why?" questions, about Cloneable.

Betty Rubble? Well, I would go with Betty... but I'd be thinking of Wilma.
I agree. Here's the link:
subject: Cloning in java
It's not a secret anymore!