Java是否有默认的复制构造函数(就像C++中一样)

Does Java have a default copy constructor (like in C++)?

本文关键字:是否 一样 C++ 就像 默认 复制 构造函数 Java      更新时间:2023-10-16

Java是否有默认的复制构造函数作为C++?如果它有一个-如果我显式声明另一个构造函数(而不是复制构造函数),它是否仍然可用?

Java没有内置复制构造函数。

但是您可以编写自己的此类构造函数。参见以下示例:

class C{
    private String field;
    private int anotherField;
    private D d;
    public C(){}
    public C(C other){
        this.field = other.field;
        this.anotherField = other.anotherField;
        this.d = new D(other.d); //watch out when copying mutable objects; they should provide copy constructors, as well. Otherwise, a deep copy may not be possible
    }
    //getters and setters
}
class D{//mutable class
    //fields
    public D(D other){
        //this is a copy constructor, like the one for C class
    }
}

Java没有默认的复制构造函数。你需要自己定义它。

有一个复制构造函数(但不是默认的),但它应该显式调用

public MyClass(MyClass toCopy) { 
   someField = toCopy.someField; 
}
不,它没有默认的复制构造函数。默认构造函数。

您不必为类提供任何构造函数,但在执行此操作时必须小心。编译器自动为任何没有构造函数的类提供无参数的默认构造函数。此默认构造函数将调用超类的无参数构造函数。在这种情况下,如果超类没有无参数构造函数,编译器会抱怨,因此您必须验证它是否有。如果你的类没有显式的超类,那么它有一个Object的隐式超类,它确实有一个无参数构造函数。

通常我会提供一个类似的

public class CopyConEx {
      /**
      * Regular constructor.
      */
      public CopyConEx(type  field1, type field2) {
        this.field1 = field1;
        this.field2 = field2;
      }
      /**
      * Copy constructor.
      */
      public CopyConEx(CopyConEx aCopyConEx) {
        this(aCopyConEx.getField1(), aCopyConEx.getField2());   
      }

Java支持克隆,但不使用复制构造函数。请在下面找到关于Java克隆的url。

http://adtmag.com/articles/2000/01/18/effective-javaeffective-cloning.aspx

在Java中,提供自动复制构造函数是毫无意义的。

Java不需要,因为您只能对对象进行引用。(在C++中,您可以按值四舍五入地传递对象,因此语法需要允许自动复制对象)。

如果您需要在Java中获取对象的深层副本,那么实现Cloneable

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

另请参阅使用深度复制编写复制构造函数。

相关文章: