2012-12-13 155 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:是的,这显然是不正确的,叹了口气。 –