clone method in Java

clone() method in Java is used to create and return copy of the object. Clone() method is used in class where Cloneable interface is implemented but throws a CloneNotSupportedException where a Cloneable interface is not implemented.

clone method in Java

clone() method in Java is used to create and return copy of the object. Clone() method is used in class where Cloneable interface is implemented but throws a CloneNotSupportedException where a Cloneable interface is not implemented.

clone method in Java

clone() method in Java is used to create and return copy of the object. Clone() method is used in class where Cloneable interface is implemented but throws a CloneNotSupportedException where a Cloneable interface is not implemented.

public clone() method is not specified in many interfaces and abstract classes. Also it's use in against abstraction.

If you want to retrieve an object of clone() method, you must cast it in the same class in the appropriate type.

One can use copy constructor instead of clone() method.

In the following example we will learn how clone() method works and is used.

import java.util.*;

public class CloneTest{
  public static void main(String[] args){

  Employee emp = new Employee("Amardeep", 50000);
  emp.setHireDay(2005,0,0);
  Employee emp1 = (Employee)emp.clone();
  emp1.raiseSalary(20);
  emp1.setHireDay(2008, 12, 31);
  System.out.println("Employee=" + emp);
  System.out.println("copy=" + emp1);
  }
}
class Employee implements Cloneable{
  public Employee(String str, double dou){
  name = str;
  salary = dou;
  }
  public Object clone(){
  try{
  Employee cloned = (Employee)super.clone();
  cloned.hireDay = (Date)hireDay.clone();
  return cloned;
  }
  catch(CloneNotSupportedException e){
  System.out.println(e);
  return null;
  }
  }
  public void setHireDay(int year, int month, int day){
  hireDay = new GregorianCalendar(year,month - 1, day).getTime();
  }
  public void raiseSalary(double byPercent){
  double raise = salary * byPercent/100;
  salary += raise;
  }
  public String toString(){
  return "[name=" + name+ ",salary=" + salary+ ",hireDay=" + hireDay+ "]";
  }
  private String name;
  private double salary;
  private Date hireDay;
}

Output:

C:\help>javac CloneTest.java

C:\help>java CloneTest
Employee=[name=Amardeep, salary=50000.0, hireDay=Tue Nov 30 00:00:00 GMT+05:30 2004]
copy=[name=Amardeep, salary=60000.0, hireDay=Wed Dec 31 00:00:00 GMT+05:30 2008]