The Clone Method
Problem
You want to clone yourself. Or at least your objects.
Solution
Override Object.clone( )
.
Discussion
To clone something is to make a duplicate of
it. The clone( ) method in Java makes an exact
duplicate of an object. Why do we need cloning? Java’s method
calling semantics are call-by-reference, which allows the
called method to modify the state of an object that is passed into
it. Cloning the input object before calling the method would pass a
copy of the object, keeping your original safe.
How can you clone? Cloning is not “enabled” by default in classes that you write.
Object o = new Object( ); Object o2 = o.clone( );
If you try calling clone( ) without any special
preparation, as in this excerpt from
Clone0.java, you will see a message like this
(from the Jikes compiler; the javac message may
not be as informative):
Clone0.java:4:29:4:37: Error: Method "java.lang.Object clone( );" in class "java/ lang/Object" has protected or default access. Therefore, it is not accessible in class "Clone0" which is in a different package.
You must take two steps to make your class cloneable:
Override
Object’sclone( )method.Implement the empty Cloneable interface.
Using cloning
The class java.lang.Object declares its clone
protected and
native
.
Protected
classes can be called by a subclass or those in the same package
(i.e., java.lang), but not by unrelated classes.
That is, you can call Object.clone( ) -- the native method that does the magic of duplicating the object -- only ...