Last Updated : 23 Jul, 2025
Like C++, Java also supports a copy constructor. But, unlike C++, Java doesn't create a default copy constructor if you don't write your own. A prerequisite prior to learning copy constructors is to learn about constructors in java to deeper roots. Below is an example Java program that shows a simple use of a copy constructor.
Here's a basic algorithm for implementing a copy constructor in Java:
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(Person another) {
this(another.name, another.age);
}
// Getters and setters for the instance variables
}
Example 1
Java
// Java Program to Illustrate Copy Constructor
// Class 1
class Complex {
// Class data members
private double re, im;
// Constructor 1
// Parameterized constructor
public Complex(double re, double im)
{
// this keyword refers to current instance itself
this.re = re;
this.im = im;
}
// Constructor 2
// Copy constructor
Complex(Complex c)
{
System.out.println("Copy constructor called");
re = c.re;
im = c.im;
}
// Overriding the toString() of Object class
@Override public String toString()
{
return "(" + re + " + " + im + "i)";
}
}
// Class 2
// Main class
public class Main {
// Main driver method
public static void main(String[] args)
{
// Creating object of above class
Complex c1 = new Complex(10, 15);
// Following involves a copy constructor call
Complex c2 = new Complex(c1);
// Note: Following doesn't involve a copy
// constructor call
// as non-primitive variables are just references.
Complex c3 = c2;
// toString() of c2 is called here
System.out.println(c2);
}
}
Copy constructor called (10.0 + 15.0i)
Example 2
Java
// Java Program to Illustrate Copy Constructor
// Class 1
class Complex {
// Class data members
private double re, im;
// Constructor
public Complex(double re, double im)
{
// this keyword refers to current instance itself
this.re = re;
this.im = im;
}
}
// Class 2
// Main class
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Creating object of above class
// inside main() method
Complex c1 = new Complex(10, 15);
// Note: compiler error here
Complex c2 = new Complex(c1);
}
}
Output:
Now, in the above code, the line calling the function with the object c1 as the parameter will give the error as the type of the parameter in the constructors is of 'double' type while the passed content is of 'object' type.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4