Является ли Java конструктором копии по умолчанию как C++? Если он имеет один - остается ли он полезным, если я объявляю другой конструктор (а не конструктор копирования) явно?Имеет ли Java конструктор копии по умолчанию (например, на C++)?
ответ
Java не имеет конструкторов экземпляров bulit-in.
Но вы можете написать свои собственные такие конструкторы. См. Пример ниже:
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
}
}
Это правильно. –
@RomanVottner Чтобы расширить, это не всегда просто, особенно если вы не можете изменить одно из полей, которые изменяются, чтобы дать ему конструктор копирования. – Cruncher
В Java нет конструктора копии по умолчанию. Вам нужно будет определить это самостоятельно.
Нет, у него нет конструктора копии по умолчанию. Конструктор по умолчанию.
Для вашего класса необязательно указывать constructors, но при этом вы должны быть осторожны. Компилятор автоматически предоставляет конструктор по умолчанию без аргументов для любого класса без конструкторов. Этот конструктор по умолчанию вызовет конструктор без аргументов суперкласса. В этой ситуации компилятор будет жаловаться, если суперкласс не имеет конструктора без аргументов, поэтому вы должны убедиться, что он это делает. Если у вашего класса нет явного суперкласса, то он имеет неявный суперкласс 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());
}
Существует копия конструктор (но не по умолчанию один), но оно должно быть названо явно (В C++ это будет быть неявно вызывается при необходимости):
public MyClass(MyClass toCopy) {
someField = toCopy.someField;
}
Поддержка клонирования Java, но не использование конструктора копирования. Ниже приведен URL-адрес для клонирования Java.
http://adtmag.com/articles/2000/01/18/effective-javaeffective-cloning.aspx
Если вы прочтете любой из других ответов, вы обнаружите, что, конечно, Java поддерживает конструкторы копирования. Их просто нет * по умолчанию *, не более, чем 'clone()' поддерживается по умолчанию (вы должны реализовать 'Cloneable' и определять' clone() 'самостоятельно). (И вашей статье почти 14 лет ... не уверен, что я все равно буду доверять чему-то, написанному во времена Java 1.2.) – dcsohl
Как C++, Java также поддерживает конструктор копирования. Но, в отличие от C++, Java не создает конструктор копии по умолчанию, если вы не пишете свой собственный.
просто добавить java не создает копию по умолчанию, потому что нет необходимости в ней в нормальных ситуациях. Это только переход по ссылке в java. – Anugoonj
В Java предоставление автоматического конструктора копии было бы бессмысленно.
Java не нужен, так как вы можете иметь только ссылки на объекты. (В C++ вы можете передавать объекты по значению, чтобы грамматика должна была автоматически копировать объект).
Если вам нужно взять глубокие копии объекта на Java, тогда реализуйте Cloneable
.
- 1. Конструктор по умолчанию C++
- 2. C++, конструктор по умолчанию
- 3. C++ как компилятор синтезирует конструктор копии по умолчанию
- 4. Конструктор по умолчанию C++
- 5. C++ Конструктор копирования по умолчанию
- 6. Почему конструктор копирования шаблонов переопределяет конструктор копии по умолчанию?
- 7. Конструктор по умолчанию в C
- 8. Изменение конструктора копии по умолчанию C++
- 9. Конструктор копии на C++ и мелкая копия
- 10. Java: конструктор по умолчанию и непараметрированный конструктор
- 11. Является ли шаблонный конструктор переопределять неявный конструктор копии в C++?
- 12. Можете ли вы отключить построение копии по умолчанию на C++?
- 13. C++ Конструктор по умолчанию недоступен
- 14. Что означает конструктор по умолчанию в C#?
- 15. Конструктор копии C++ с указателями
- 16. Наследование в Java (конструктор по умолчанию)
- 17. C# Конструктор аргументов по умолчанию
- 18. Java, использующий конструктор по умолчанию
- 19. Конструктор по умолчанию в Java?
- 20. C++ Шаблон по умолчанию конструктор
- 21. Тип не имеет конструктор по умолчанию automapper
- 22. C++ Pass Точка на конструктор по умолчанию
- 23. Имеет ли значение по умолчанию конструктор нуль-инициализировать переменную-член?
- 24. Есть ли стандартный конструктор по умолчанию?
- 25. Нужен ли конструктор по умолчанию?
- 26. Создан ли по умолчанию конструктор?
- 27. C++ по умолчанию конструктор копирования
- 28. Тип 'Api.Controllers.' не имеет конструктор по умолчанию
- 29. Почему фрагмент имеет конструктор по умолчанию?
- 30. «RavenReader.Web.Controllers.UserController» не имеет конструктор по умолчанию
С помощью конструктора копирования вы имеете в виду конструктор, который принимает объект того же типа и дублирует его? Если да, то нет, у java этого нет. – Cruncher
Нет, у него нет конструктора копии по умолчанию. –
http://stackoverflow.com/questions/827785/why-doesnt-java-have-a-copy-constructor – Cruncher