为什么在用Java编写参数构造函数时,默认的无参数构造函数会失败?
当Java中给出参数构造函数时,为什么默认的无参数构造函数会失败 这个设计有什么意义 例如:为什么在用Java编写参数构造函数时,默认的无参数构造函数会失败?,java,Java,当Java中给出参数构造函数时,为什么默认的无参数构造函数会失败 这个设计有什么意义 例如: class Father { public String name = "Father"; public Father(String name) { this.name = name; } } public class Test { public static void main(String[] args) { F
class Father {
public String name = "Father";
public Father(String name) {
this.name = name;
}
}
public class Test {
public static void main(String[] args) {
Father p = new Father(); //Error
}
}
如果没有提供构造函数,编译器将生成一个默认的零参数构造函数
如果您提供任何构造函数,编译器将不会生成任何其他构造函数。在本例中,单参数构造函数由您提供,因此编译器不会生成默认构造函数。
Father()
不存在,因为您专门定义了自己的构造函数。要么删除它,要么自己创建无参数构造函数。它不会“失败”。根据,它不是由编译器生成的。您定义了一个构造函数,因此默认构造函数不是由编译器生成的。您也不希望生成它,因为这样会允许使用非法状态实例化您的类。如果你需要一个无参数构造函数和其他构造函数一起使用,那么你需要将它们全部声明。我知道你的意思。但我真正想知道的是,当我定义自己的构造函数时,为什么编译器不会生成无参数的?如果在这种情况下创建了无参数构造函数,对项目有什么负面影响?@StackUser负面影响是失去控制。如果您声明了一个或多个构造函数,那么这些就是类的构造函数。让编译器继续生成一个默认构造函数意味着现在有一个额外的构造函数,您没有为它编写代码。编译器怎么可能知道如何以满足类约定的方式实现默认构造函数?回答:不可能。当没有显式声明任何构造函数时生成默认构造函数的唯一原因可能是因为Java语言要求每个类至少有一个构造函数。@Slaw Well put。你应该把它作为一个答案输入,因为它最能说明OP真正在问什么。