重载构造函数

时间:2010-12-12 22:33:44

标签: java

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

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

  1. 在标有2的行上, 编译器抱怨“this()”需要成为第一个语句 方法,当它。那是什么?

  2. 如果我正在编写一个重载的构造函数,并且我没有覆盖默认构造函数,我是否需要一个显式的“this();”在重载的构造函数中,如果我想执行默认构造函数的行为,或者它是否包含在“free”的所有构造函数中?

  3. 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;
         }
    
    }
    

2 个答案:

答案 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()