覆盖Java中的默认构造函数

joh*_*ode 3 java constructor initialization

很简单的问题,但无论如何:有没有理由重写默认构造函数,如下所示:

public SomeObject(){
}
Run Code Online (Sandbox Code Playgroud)

这是公开的.它没有任何逻辑.那么,有必要吗?我没看到全貌?

感谢您的所有帮助.

小智 10

定义空的无参数构造函数的一个原因是,是否存在非默认构造函数,并且仍希望可以访问no-arg构造函数(公共或受保护).

这是因为任何[其他]构造函数定义都会阻止自动添加默认的no-arg构造函数:

编译器自动为没有构造函数的任何类提供[public]无参数,默认构造函数.

(请参阅该链接中的下一位,它将讨论将要调用的默认超级构造函数.)

即使从不手动使用no-arg构造函数,它对其他东西也很重要,例如Serializable:

在反序列化期间,将使用类的public或protected no-arg构造函数初始化非可序列化类的字段.必须可以对可序列化的子类访问no-arg构造函数.可序列化子类的字段将从流中恢复.