2010-12-12 109 views
0

我有重載構造一個3個問題:重載構造

1.On線條爲標誌線1, 我打電話的重載的構造函數,但編譯器無法解決的號召,
有別的東西我需要去做?

  • 在標有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; 
        } 
    
    } 
    
    +0

    也許它已經太晚了,但我不能在那裏看到一個錯誤。 HM。不要介意......不過,請不要在參考名稱的開頭使用大寫字母,它當然是風格問題。但你很快就會發現區分類名和其他東西更容易。命名風格的一種常見方式是類似於:類名 - 大寫字母在開始,引用 - 小寫字母,常量 - 大寫字母... – mad 2010-12-12 22:41:08

    +0

    ahhh發現一個 - 不要在項目構造函數前面寫「void」,這應該同時執行錯誤 – mad 2010-12-12 22:44:48

    回答

    2

    構造函數有一個方法簽名。 項目的構造應該是

    public Item(String InName, double InPrice) { ... } 
    

    ,而不是

    public void Item(...) 
    

    而且你的第二個問題: 如果你想調用其他的(未覆蓋,但明確地定義參數的)構造函數,你需要一個明確致電this()。如果您想從超級班級調用構造函數,則該調用爲super()

    3

    當前您未定義構造函數。它不應該有返回類型(你的有void)。所以:

    public Item(String InName, double InPrice) { .. } 
    

    然後,調用this()將不會再工作。當你用參數定義一個構造函數時,默認的(no-arg)構造函數是「丟失」的。所以你不能稱它。而在你的情況下 - 你不需要它。

    (另請注意,在Java中的變量名稱應以小寫(按照約定)開始)