0

考虑 -

public class Class_A {

    public void func() {...}

    public void func(int a){...}

三个都 -

Class_A a = new Class_A(); // legal
a.func(); // legal
a.func(1); // legal

但是在将带有arg likepublic Class_A (int a){...}的构造函数添加到Class_A之后,默认构造函数变为-

Class_A a = new Class_A(); // The constructor Class_A() is undefined

那迫使我添加public Class_A() {/*Do Nothing*/}Class_A.

既然每个类都有默认构造函数 ,为什么默认构造函数带有 arg 的构造函数不能同时存在并且是相同 func()func(int a)

4

4 回答 4

2

它具有默认构造函数,除非您定义自己的构造函数,在这种情况下您需要重新定义默认构造函数

于 2012-12-20T23:55:57.923 回答
2

因为如果您编写构造函数,编译器不会为您编写默认构造函数。你必须明确地写一个。

来自JLS

如果一个类不包含构造函数声明,则隐式声明一个没有形式参数且没有 throws 子句的默认构造函数。

于 2012-12-20T23:56:10.793 回答
1

这是相反的方式。

如果您没有任何构造函数,则默认情况下会得到无参数的构造函数。

于 2012-12-20T23:56:20.800 回答
0

“默认构造函数”这个名称意味着它是在您自己不提供时提供的。只要您提供了自己的构造函数,编译器就不会为您生成默认构造函数。

注意不要将默认构造函数与无参数构造函数混淆。这是两个完全不同的东西。

于 2012-12-20T23:58:43.913 回答