Java 复制构造函数

Java 复制构造函数

和C++一样,Java也支持复制构造函数。但是,与C++不同的是,如果你不写自己的构造函数,Java不会创建一个默认的拷贝构造函数。在学习拷贝构造函数之前的一个前提条件是,要深入了解java中的构造函数。下面是一个Java程序的例子,展示了拷贝构造函数的简单用法。

下面是在Java中实现复制构造函数的基本算法

  • 定义一个类: 创建一个代表你要管理的对象的类。
  • 定义实例变量: 在这个类中,定义代表你要管理的数据的实例变量。
  • 定义一个构造函数。为该类定义一个构造函数,以同一类的一个实例作为其参数。这个构造函数将被用来创建一个对象的副本。
  • 初始化实例变量 :在构造函数中,用参数对象的值初始化实例变量。
  • 使用this关键字来引用实例变量。为了在构造函数中引用类的实例变量,使用this关键字。
  • 检查空值 :如果参数对象为空,则返回一个新的类的实例,并为实例变量设置默认值。
  • 实现深度复制: 如果实例变量是对象,在构造函数中创建这些对象的新实例,并用参数对象的值来初始化它们。这被称为深度复制,并确保对被复制对象的改变不会影响原始对象。

下面是一个简单类Person的复制构造函数的实现示例

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
}

例1

// 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)

例2

// 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);
    }
}

输出

Java中的复制构造函数

现在,在上面的代码中,以对象c1为参数调用函数的那一行将出现错误,因为构造函数中的参数类型是 “double “类型,而传递的内容是 “object “类型。

如果你发现有什么不正确的地方,或者你想分享更多关于上述话题的信息,请写下评论。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程