繁体   English   中英

重载构造函数

[英]overloading constructors

我对重载的构造函数有3个问题:

1.在标记为第1行的行上,我正在调用重载的构造函数,但编译器无法解决该调用,
还有什么我需要做的吗?

  1. 在标有2的行上,编译器抱怨“ this()”必须是方法中的第一条语句。 那是什么

  2. 如果我正在编写重载的构造函数,并且没有覆盖默认的构造函数,我是否需要显式的“ 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM