Table of contents
1.
Introduction
2.
What is Constructor in Java?
2.1.
Types of Constructor
3.
Copy Constructor
4.
Use of Copy Constructor
5.
Writing a Copy Constructor
5.1.
Constructor Example
5.2.
Copy Constructor Example
5.3.
Program 
5.4.
Java
5.5.
Output 
6.
Copy Constructor Vs clone() Method
7.
Advantages of Copy Constructor in Java
8.
Disadvantages of Copy Constructor in Java
9.
Frequently Asked Questions
9.1.
What is constructor copy in Java?
9.2.
Example of copy constructor in Java.
9.3.
What is copy constructor in OOP?
9.4.
What is the difference between constructor and copy constructor?
9.5.
Where is copy constructor used?
10.
Conclusion
Last Updated: Apr 22, 2024
Easy

Copy Constructor in Java

Author Aditya Anand
1 upvote
Career growth poll
Do you think IIT Guwahati certified course can help you in your career?

Introduction

When it comes to object-oriented programming in Java, understanding the constructors is crucial. Among these, the copy constructor stands out as a powerful tool for creating deep copies of objects. In this blog, we delve into the essence of copy constructors in Java, exploring their purpose, syntax, and usage scenarios

Copy Constructor in Java

Also see, Duck Number in Java and Hashcode Method in Java

What is Constructor in Java?

In Java, a constructor is a piece of code that is similar to a method. This method is called when a new instance of a class is created. When the constructor is called, memory for the object is allocated in the memory.

It's a specific type of method for configuring an object.

When an object is formed with the new() keyword, at least one constructor is called.

The default constructor is used if no constructor is available in the class. In this case, the Java compiler constructs a default constructor for you.

Types of Constructor

Java supports various constructors, namely:

  • Default Constructor - This is the default constructor that can or cannot be specified.
  • Parameterized Constructor - When we create a constructor by ourselves using parameters, it is called the parameterised constructor.
  • Copy constructor - It is used to create a clone of an object.

Copy Constructor

A copy constructor in Java is a special type of constructor that allows for the creation of a new object by copying the values of another object of the same class. It provides a convenient way to initialize an object by duplicating the state of an existing object, thereby creating a separate instance with the same data.

In essence, a copy constructor takes an object as an argument and initializes a new object with the same state as the provided object. This includes copying the values of all member variables, whether they are primitive types, object references, or arrays. Copy constructors are particularly useful for creating deep copies of objects, ensuring that any changes made to the copied object do not affect the original object.

Use of Copy Constructor

The copy constructor in Java serves various purposes in object-oriented programming. Firstly, it allows developers to create a new object with the same state as an existing object, facilitating the creation of deep copies. This is particularly useful when dealing with complex objects containing nested structures or references to other objects. Additionally, copy constructors enable safe object initialization by ensuring that the new object is independent of the original, preventing unintended side effects from modifications to either instance. Furthermore, copy constructors can be utilized in scenarios such as cloning objects, implementing certain design patterns like Prototype, or facilitating object serialization and deserialization. Overall, the use of copy constructors adds flexibility, reliability, and maintainability to Java codebases by providing a mechanism for creating copies of objects tailored to specific requirements and use cases.

Writing a Copy Constructor

Let’s learn more about copy constructors by looking at some examples.

Constructor Example

We develop a parameterized constructor that accepts the values for all instance variables and initialises them with the given values to initialise the values of instance variables of a class.

int brand;
int no;
public Car(String brand, int no){
   this.brand = brand;
   this.no = no;
}

Initialization: 

Car c = new Car(brand, no);

Copy Constructor Example

Copy Constructor accept an object of the current class and set the values of instance variables to the values in the obtained object.

public Car(Car c){
   this.brand = c.brand;
   this.no = c.no;
}

Initialization: 

Car copyOfC = new Car(c);
You can also try this code with Online Java Compiler
Run Code

Program 

Let’s see an example program to understand the concept of copy constructor. we have created a car class, which has brand, no class variable. It has parameterised constructor and copy constructor and a display function to display the values.

  • Java

Java

import java.util.Scanner;
// class definition
public class Car {
   // variables
   private String brand;
   private int no;
   // normal constructor
   public Car(String brand, int no){
       this.brand = brand;
       this.no = no;
   }
   // copy constructor
   public Car(Car c){
       this.brand = c.brand;
       this.no = c.no;
   }
   // display function
   public void display(){
       System.out.println("brand : "+this.brand);
       System.out.println("no : "+this.no);
   }
   public static void main(String[] args) {
       String brand = "Ford";
       int no = 20;
       Car c = new Car(brand, no);
       System.out.println("Displaying the original object");
       c.display();
       System.out.println("Displaying the copied object");
       Car copyOfC = new Car(c);
       copyOfC.display();
   }
}
You can also try this code with Online Java Compiler
Run Code

Output 

You can also read about the Multiple Inheritance in Java And Fibonacci Series in Java

Copy Constructor Vs clone() Method

FeatureCopy Constructorclone() Method
PurposeCreates a new object with the same state as the original object.Creates a new object as a clone of the original object.
InheritedNot inherited, must be explicitly implemented.Inherited from the Cloneable interface, but requires explicit implementation of clone() method.
AccessCan access all accessible members, including private and protected.Can only access public members, may require casting.
Return TypeReturns a new object of the same class.Returns an Object, requiring casting to the appropriate type.
ExceptionsCannot throw checked exceptions.May throw CloneNotSupportedException.
Deep CopyRequires manual implementation for deep copying.Supports shallow copying by default, requires manual implementation for deep copying.
PerformanceGenerally more efficient due to direct access to members.Potentially less efficient due to method invocation and casting.
CustomizationProvides flexibility for custom copy behavior.Allows customization through overriding clone() method.
Clonable InterfaceNot required.Requires implementation of Cloneable interface.
ConstructorDefined as a special type of constructor.Implemented as a method within the class.

Advantages of Copy Constructor in Java

  • Controlled Copying: Provides developers with control over how objects are copied, allowing for customization according to specific requirements.
  • Deep Copy Support: Enables the creation of deep copies, ensuring that nested objects or references are duplicated accurately.
  • Safe Object Initialization: Helps in initializing new objects safely by preventing unintended side effects from modifications to the original object.
  • Flexibility: Offers flexibility for implementing custom copy behavior, accommodating various scenarios and use cases.
  • Efficiency: Generally more efficient than other copying mechanisms due to direct access to object members.

Disadvantages of Copy Constructor in Java

  • Manual Implementation: Requires manual implementation within classes, increasing development effort and potential for errors.
  • Not Inherited: Copy constructors are not inherited and must be explicitly implemented in each class where copying is required.
  • Limited Accessibility: Can only access accessible members of the object, which may limit its usability in certain scenarios.
  • No Built-in Cloning Support: Does not have built-in support for object cloning like the clone() method, requiring developers to implement deep copying manually.
  • Not Serializable: Objects created using copy constructors are not automatically serializable, requiring additional effort for serialization and deserialization.

Frequently Asked Questions

What is constructor copy in Java?

A constructor copy in Java refers to a special constructor that creates a new object by copying the state of another object of the same class, allowing for the initialization of objects through duplication of existing instances.

Example of copy constructor in Java.

An example of a copy constructor in Java is a class Person with a copy constructor Person(Person other) that creates a new Person object by copying the attributes of another Person object.

What is copy constructor in OOP?

In object-oriented programming (OOP), a copy constructor is a constructor used to create a new object by copying the state of an existing object, providing a convenient way to initialize objects through duplication.

What is the difference between constructor and copy constructor?

The main difference between a constructor and a copy constructor lies in their purpose: constructors are used to initialize new objects, while copy constructors specifically create new objects by copying the state of existing ones.

Where is copy constructor used?

Copy constructors are used in scenarios where objects need to be duplicated while maintaining the integrity of their state, such as creating deep copies, implementing cloning mechanisms, or initializing objects based on existing instances.

Conclusion

In this article, we have extensively discussed copy constructors in java. We have discussed:

  • Constructor and different types of constructors in java.
  • What is a copy constructor, and why do we need it?
  • Copy constructor vs Clone method.
  • Advantages and disadvantages of copy constructor.

We hope that this blog has helped you enhance your knowledge regarding copy constructors in java and if you would like to learn more, check out our articles on Understanding Encapsulation in JavaIntroduction to java. Do upvote our blog to help other ninjas grow.

Head over to our practice platform Coding Ninjas Studio to practice top problems, attempt mock tests, read interview experiences, and much more.!

Happy Reading!

Live masterclass