我需要在我的类中有一个复制构造函数,因为我需要创建重复的对象。我相信如果我将创建一个复制构造函数,我将不得不指定非参数化构造函数,因为Java将不再提供默认构造函数。
我不想触及默认构造函数,因为这是我在代码中使用的地方。有没有一个复制构造函数或类似的东西没有定义基本构造函数的解决方法。
答案 0 :(得分:8)
不,如果你想让无参数构造函数和都有一个带参数的构造函数,你需要同时声明它们。虽然声明无参数构造函数非常容易:
public YourClassName() {
}
super();
是隐含的。
这将与默认构造函数的行为完全相同,尽管它不一定具有与默认构造函数相同的访问权限。 (当然,如果您愿意,可以将其从public
更改。)来自JLS section 8.8.9:
如果一个类不包含构造函数声明,则隐式声明一个没有形式参数且没有throws子句的默认构造函数。
如果声明的类是原始类Object,则默认构造函数具有空体。否则,默认构造函数只调用不带参数的超类构造函数。
如果默认构造函数是隐式声明的,但是超类没有可访问的构造函数(第6.6节),它不带参数且没有throws子句,那么这是一个编译时错误。
在类类型中,如果该类声明为public,则默认构造函数被隐式赋予访问修饰符public(§6.6);如果该类被声明为protected,则默认构造函数被隐式赋予访问修饰符protected(§6.6);如果该类被声明为private,则默认构造函数被隐式赋予访问修饰符private(§6.6);否则,默认构造函数具有默认访问权限隐含的默认访问权限。
答案 1 :(得分:3)
如果你真的不想写默认构造函数,你可以这样做:
public static MyClass create(MyClass original) {
// return the new instance
}