我对重载的构造函数有3个问题:
1.在标记为第1行的行上,
我正在调用重载的构造函数,但编译器无法解析调用,
还有什么我需要做的吗?
在标有2的行上, 编译器抱怨“this()”需要成为第一个语句 方法,当它。那是什么?
如果我正在编写一个重载的构造函数,并且我没有覆盖默认构造函数,我是否需要一个显式的“this();”在重载的构造函数中,如果我想执行默认构造函数的行为,或者它是否包含在“free”的所有构造函数中?
class JavaSnippet {
public static void main(String[] args) {
String MenuItemName="Coffee";
double MenuItemPrice=1.0;
Item MenuItem;
//1-> MenuItem=new Item(MenuItemName,MenuItemPrice);// Get "cannot find symbol"
}
}
class Item {
String name;
double price;
public void Item(String InName, double InPrice) {
// 2-> this();// get "call to this must be first statement in constructor"
name=InName;
price=InPrice;
}
}
答案 0 :(得分:3)
目前您没有定义构造函数。它不应该有返回类型(你的有void
)。所以:
public Item(String InName, double InPrice) { .. }
然后,调用this()
将无法再次运行。使用参数定义构造函数时,默认(no-arg)构造函数为“lost”。所以你不能称之为。在你的情况下 - 你不需要它。
(另请注意,Java中的变量名称应以小写字母(按惯例)开头)
答案 1 :(得分:2)
您的构造函数具有方法签名。 item的构造函数应该是
public Item(String InName, double InPrice) { ... }
而不是
public void Item(...)
你的第二个问题:
如果要调用另一个(不覆盖,但明确定义无参数)构造函数,则需要显式调用this()
。如果要从超类调用构造函数,则调用为super()
。