I have written this clone method for when the parent of the Employee class is abstract and the clone() method in the parent class is abstract.I wanted to copy the primitive
The standard pattern for making a class cloneable is:
Cloneable
clone()
method and make it publicclone()
call super.clone()
and then copy any mutable object's stateYou should not create a new object using new
. The proper way is to call super.clone()
for a new instance. Object
's clone()
is special and will create a new copy of the object and copy its primitive fields and references.
For example:
public class Person implements Cloneable {
protected String name;
// Note that overridden clone is public
public Object clone() {
Person clone = (Person)super.clone();
// No need to copy name as the reference will be
// copied by Object's clone and String is immutable
return clone;
}
}
public class Employee extends Person {
protected int id;
protected java.awt.Point location;
public Object clone() {
Employee clone = (Employee )super.clone();
// No need to copy id as Object's clone has already copied it
// Need to clone location as Point is mutable and could change
clone.location = location.clone();
return clone;
}
}