[英]overloading constructors
我对重载的构造函数有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;
}
}
当前,您尚未定义构造函数。 它不应具有返回类型(您的返回值为void
)。 所以:
public Item(String InName, double InPrice) { .. }
然后,调用this()
将不再起作用。 当您定义带有参数的构造函数时,默认(无参数)构造函数为“丢失”。 所以你不能打电话。 而就您而言-您不需要它。
(还要注意,Java中的变量名应以小写字母开头(按照惯例))
您的构造函数具有方法签名。 item的构造函数应为
public Item(String InName, double InPrice) { ... }
并不是
public void Item(...)
第二个问题是:如果要调用另一个(未重写,但显式定义的无参数)构造函数,则需要对this()
进行显式调用。 如果要从超类调用构造函数,则调用为super()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.