Does Java has a default copy constructor as C++? If it has one - does it remain usable if I declare another constructor (not a copy constructor) explicitly?
Java does not have bulit-in copy constructors.
But you can write your own such constructors. See an example below:
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 does not have a default copy constructor. You'll need to define it yourself.
There is a copy constructor (But not default one), but it should be called explicitly (In C++ it'll be implicitly called when needed):
public MyClass(MyClass toCopy) { 
   someField = toCopy.someField; 
}
                        No, it doesn't have a default copy constructor. A default constructor.
You don't have to provide any constructors for your class, but you must be careful when doing this. The compiler automatically provides a no-argument, default constructor for any class without constructors. This default constructor will call the no-argument constructor of the superclass. In this situation, the compiler will complain if the superclass doesn't have a no-argument constructor so you must verify that it does. If your class has no explicit superclass, then it has an implicit superclass of Object, which does have a no-argument constructor.
Usually I provide a one like,
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());   
      }
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With