📜  Java中的复制构造函数

📅  最后修改于: 2022-05-13 01:54:53.556000             🧑  作者: Mango

Java中的复制构造函数

先决条件Java中的构造函数
与 C++ 一样, Java也支持复制构造函数。但是,与 C++ 不同的是,如果您不自己编写, Java不会创建默认的复制构造函数。

以下是一个示例Java程序,它显示了复制构造函数的简单使用。

Java
// filename: Main.java
 
class Complex {
 
    private double re, im;
     
    // A normal parameterized constructor
    public Complex(double re, double im) {
        this.re = re;
        this.im = im;
    }
     
    // 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)";
    }
}
 
public class Main {
 
    public static void main(String[] args) {
        Complex c1 = new Complex(10, 15);
         
        // Following involves a copy constructor call
        Complex c2 = new Complex(c1);  
 
        // Note that following doesn't involve a copy constructor call as
        // non-primitive variables are just references.
        Complex c3 = c2;  
 
        System.out.println(c2); // toString() of c2 is called here
    }
}


Java
// filename: Main.java
 
class Complex {
 
    private double re, im;
 
    public Complex(double re, double im) {
        this.re = re;
        this.im = im;
    }
}
 
public class Main {
     
    public static void main(String[] args) {
        Complex c1 = new Complex(10, 15); 
        Complex c2 = new Complex(c1);  // compiler error here
    }
}


输出:

Copy constructor called
(10.0 + 15.0i)

现在尝试以下Java程序:

Java

// filename: Main.java
 
class Complex {
 
    private double re, im;
 
    public Complex(double re, double im) {
        this.re = re;
        this.im = im;
    }
}
 
public class Main {
     
    public static void main(String[] args) {
        Complex c1 = new Complex(10, 15); 
        Complex c2 = new Complex(c1);  // compiler error here
    }
}