2012-12-13 153 views
0

可能重複:
Java default constructorJava默認構造函數問題 - 實際上構成「默認構造函數」的是什麼?

我的工作在Java的實踐問題,並遇到了這個:

考慮:

class X {} 

class Y {Y() {}} 

class Z {z(int i) {} } 

哪一類都有一個默認構造函數?

A. X僅

B.僅Y

C.僅Z

D. X和Y

E.ÿ和Z

F. X和Z

G. X,Y和Z

我要說的是,正確答案是A,因爲類X是唯一一類,沒有任何明確定義構造函數。我的同事說這是G,因爲構成函數體內的值實際上是一個構成默認構造函數的構造函數。

我們已經做了一些研究和答案似乎不同,當涉及到什麼是默認構造函數實際上是(在這個級別)。

任何人都可以在這裏提供答案和邏輯解釋嗎?非常感謝你。

+5

是吧'Z(int i)以'或'Z(int i)以' –

回答

9

我的同事說這是G,因爲什麼構成默認構造函數是當您實際更改構造函數體內的值。

我想說你的同伴在語言層面上是錯誤的。 Section 8.8.9 of the JLS只有使用術語「默認構造函數」來表示「編譯器提供的構造函數,如果沒有明確指定構造函數」。

我希望這是規定了更明確 - ?我也希望C#中使用相同的術語:(

+2

+1' Z'不會編譯,除非'z'應該被讀爲'Z' –

+0

謝謝 - 也回答鍵說它是G,這意味着回答鍵是錯誤的。http://en.wikipedia.org/wiki/Default_constructor –

+0

@EricT:是的,這顯然是不正確的,嘆了口氣。 –