Imagine that you've created an object in Java, complete with all its member functions and data members. Now, you are faced with a dilemma. You need an exact copy of this object, with all its properties intact, but you do not want to waste precious time and effort rewriting the entire code from scratch. That's where the clone()
method in Java swoops in and saves the day!
The clone()
method in Java is a part of the Cloneable
interface and is used to create a copy, or clone, of an object. It provides a convenient way to duplicate an object's state without the need for manual field-by-field copying.
protected Object clone() throws CloneNotSupportedException
The clone()
does not take parameters.
The clone()
method in Java returns a copy of the object.
If the object does not implement the Cloneable interface, it will throw CloneNotSupportedException
.
Additionally, since the clone method is protected, it needs to be overridden
in order to use it.
Here's an example code snippet that demonstrates the usage of the clone()
method
class Person implements Cloneable {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;}// copy using clone() methodpublic Person clone() throws CloneNotSupportedException {return (Person) super.clone();}/*** Get the name of the person.** @return The name of the person.*/public String getName() {return name;}/*** Get the age of the person.** @return The age of the person.*/public int getAge() {return age;}public static void main(String[] args) {Person person1 = new Person("Alice", 25);try {// Cloning the person objectPerson person2 = person1.clone();// Modifying the cloned object's fieldsperson2.name = "Bob";person2.age = 30;// Outputting the state of both objectsSystem.out.println("Person 1 - Name: " + person1.getName() + ", Age: " + person1.getAge());System.out.println("Person 2 - Name: " + person2.getName() + ", Age: " + person2.getAge());} catch (CloneNotSupportedException e) {e.printStackTrace();}}}
Lines 1–3: The Person
class is defined and implements the Cloneable
interface for object cloning. It contains private fields name
and age
.
Lines 5–8: The constructor initializes the name
and age
fields when a Person
object is created.
Lines 11–13: The clone()
method overrides the Object
class's clone()
method to enable cloning of Person
objects. It performs a copy using super.clone()
.
Lines 20–22: The getName()
method returns the name
field value.
Lines 29–31: The getAge()
method returns the age
field value.
Lines 33–49: In the main()
method, a Person
object named person1
is created with the name Alice and age 25. It is then cloned to person2
using the clone()
method. The name
and age
fields of person2
are modified to Bob and 30, respectively. The states of both objects are printed to the console.
clone()
methodIt allows two objects to exist independently, despite being copies of one another.
Cloning is the fastest way to copy objects.
Copy constructor copies all the data over explicitly. However, cloning copies data automatically.