我需要在类中有一个复制构造函数,因为我需要创建重复的对象。我相信,如果我将创建副本构造函数,那么我也将必须指定非参数化的构造函数,因为Java将不再提供默认的构造函数。
我不想触摸默认构造函数,因为这是我在各处代码中使用的构造函数。是否有一种解决方法,可以在没有定义基本构造函数的情况下使用复制构造函数或类似的东西。
不,如果要同时拥有无参数构造函数和具有参数的构造函数,则需要同时声明它们。声明无参数构造函数非常容易:
public YourClassName() {
}
的super();
是隐含的。
尽管它不一定具有与默认构造函数相同的访问权限,但其行为与默认构造函数的行为完全相同。(当然,您可以根据需要将其更改public
为。)在JLS的8.8.9节中:
如果一个类不包含构造函数声明,则将隐式声明一个没有形式参数且没有throws子句的默认构造函数。
如果要声明的类是原始类Object,则默认构造函数的主体为空。否则,默认构造函数将简单地调用不带参数的超类构造函数。
如果隐式声明了默认构造函数,但超类没有可访问的构造函数(第6.6节),该构造函数不带参数且不包含throws子句,则这是编译时错误。
在类类型中,如果将类声明为public,则默认构造函数将隐式赋予访问修饰符public(第6.6节);如果该类被声明为受保护的,则默认构造函数被隐式赋予访问修饰符保护(第6.6节);如果该类被声明为私有,则默认构造函数被隐式赋予访问修饰符私有(第6.6节);否则,默认构造函数具有无访问修饰符暗含的默认访问权限。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句