When an object is copied to the other using assignment operator, only reference of the object is copied. So change in one object reflects in other.

Java use clone() method of Object class to copy content of one object to the other. The problem will arrive if the Class that needs to be copied also contains reference to the other object.

Classes can implements Cloneable interface to overrides the clone() method of the Object class.

The following sample code will show the procedure for implementing cloneable interface.

 public class CloneExp implements Cloneable {

  private String name;
  private String address;
  private int age;
  private Department depart;
  public CloneExp(){
    
  }
  public CloneExp(String aName, int aAge, Department aDepart) {

    this.name = aName;
    this.age = aAge;
    this.depart = aDepart;
  }

  protected Object clone() throws CloneNotSupportedException {

    CloneExp clone=(CloneExp)super.clone();

    // make the shallow copy of the object of type Department
    clone.depart=(Department)depart.clone();
    return clone;

  }
  public static void main(String[] args) {

    CloneExp ce=new CloneExp();

    try {
      // make deep copy of the object of type CloneExp
      CloneExp cloned=(CloneExp)ce.clone();
    } catch (CloneNotSupportedException e) {
      e.printStackTrace();
    }
    
  }
}