为什么构造与ARG取消定义默认构造函数?(Why does constructor with arg

2019-11-01 07:07发布

考虑 -

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

但是, 随着参数的构造函数等之后, public 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)是谁?

Answer 1:

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



Answer 2:

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

JLS

如果一个类不包含任何构造函数声明,然后没有正式参数的默认构造函数,并没有throws子句是​​隐式声明。



Answer 3:

这是周围的其他方法。

如果你没有任何构造你得到默认的无参数之一。



Answer 4:

命名为“默认构造函数”意味着,当你不自己提供一个它提供。 只要你提供自己的构造函数,编译器将不会为你生成一个默认的构造函数。

要小心,不要混淆了无参数的构造函数的默认构造函数。 这是两个完全不同的事情。



文章来源: Why does constructor with arg undefine the default constructor?