2014-09-21 68 views
-3

我試着運行下面的代碼,它給了我一個constructor A in class A cannot be applied to given types錯誤。空的構造函數的必要性

class A{ 
    int a; 
    A(int b){ 
     a = b; 
    } 
} 

public static void main (String[] args) throws java.lang.Exception 
{ 
    A a = new A(); 
    System.out.println(a.a); 
} 

如果刪除從A類c'tor然而代碼運行正常(和輸出0)。看起來,如果存在另一個c'tor,則沒有默認的c'tor(並且只有在寫入時才存在更少的c'tor參數)。我對麼? 更重要的是,這是爲什麼?

+1

是的,如果一個構造函數已經存在,編譯器將不會創建另一個。爲什麼?那麼,爲什麼編譯器應該假設你總是需要一個公共的no-params構造函數呢? – 2014-09-21 16:01:00

+0

閱讀:http://beginnersbook.com/2013/05/constructor-overloading/ – BatScream 2014-09-21 16:04:02

回答

2

如果不創建一個構造然後有一個構造器默認情況下,如下

public YourClass(){ 

} 

但是,如果你創建了以下構造:

public YourClass(int x){ 

} 

然後,你將不會有默認構造函數,即

public YourClass(){ 
//this won't exist 
} 

所以你必須做

YourClass anObject = new YourClass(5);//you can do this. 

,因此你不能這樣做

YourClass anObject = new YourClass();//you cannot do this 

爲了做到這一點,你需要自己爲

public YourClass(){ 
//this time you must create this 
} 

對於這個問題爲什麼要創建一個構造函數?,我懷疑是否有任何理由。這是OOP移動的方式。

+0

不應該被接受嗎? :-) – Nabin 2014-09-21 17:11:18

1

一旦你定義了一個非空的構造函數,那麼這個非空conscrutor就沒有含義,你必須解釋它。

public A() { 
}