为什么带arg的构造函数取消定义默认构造函数?

时间:2012-12-20 23:53:56

标签: java constructor default-constructor

考虑 -

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

但是在<{1}}添加 之后的 构造函数后,默认构造函数将成为 -

public Class_A (int a){...}

这迫使我将Class_A添加到Class_A a = new Class_A(); // The constructor Class_A() is undefined

由于每个类都有默认构造函数,为什么默认构造函数构造函数与arg 不能同时存在{{1 }和public Class_A() {/*Do Nothing*/}是?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

来自JLS

  

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

答案 2 :(得分:1)

反过来说。

如果您没有任何构造函数,则默认情况下会获得no-arg。

答案 3 :(得分:0)

名称“默认构造函数”表示当您不自己提供时,它会被提供。只要您提供自己的构造函数,编译器就不会为您生成默认构造函数。

注意不要将默认构造函数与no-arg构造函数混淆。这是完全不同的两件事。