Java 可以同时使用默认构造函数和参数构造函数吗?
我被指派使用默认构造函数和参数构造函数创建一个类,但问题是,这可能吗?我甚至不知道它是如何工作的。它们都应该给变量赋值当你在类中定义另一个构造函数时,你就不再得到“常用”的默认构造函数(公共的和没有参数的) 但是,您可以将其添加回:Java 可以同时使用默认构造函数和参数构造函数吗?,java,arrays,eclipse,class,Java,Arrays,Eclipse,Class,我被指派使用默认构造函数和参数构造函数创建一个类,但问题是,这可能吗?我甚至不知道它是如何工作的。它们都应该给变量赋值当你在类中定义另一个构造函数时,你就不再得到“常用”的默认构造函数(公共的和没有参数的) 但是,您可以将其添加回: class MyClass{ MyClass(String param){} // custom constructor MyClass(){} // bring back the non-arg one } 当然,使用ne
class MyClass{
MyClass(String param){} // custom constructor
MyClass(){} // bring back the non-arg one
}
当然,使用new
创建对象实例时,必须选择调用哪一个(不能同时调用这两个):
构造函数可以相互调用(使用
this(parameters)
)或共享方法,如果它们中有您希望保留在一个位置的公共功能。借用@bohemian的回答
public class Person
...
public Person() {
this("unknown", 0); // you can call another constructor
}
public Person(String nm, int ag) {
name = nm;
age = ag;
}
...
}
在本例中,如果调用了无参数构造函数,则
unknown
和0
将传递给另一个构造函数根据定义,实际上在Java中不能这样做。JLS§8.8.9说,“如果一个类不包含构造函数声明,那么默认构造函数将被隐式声明。”因此,只要添加任何构造函数声明,即使是无参数构造函数,也不会得到默认构造函数。看看为什么您认为这是不可能的?new
表达式的形式决定了要运行的构造函数。@ScaryWombat该链接不讨论默认构造函数。该类中没有默认构造函数。是的,我应该说no args
构造函数
public class Person
...
public Person() {
this("unknown", 0); // you can call another constructor
}
public Person(String nm, int ag) {
name = nm;
age = ag;
}
...
}