2012-12-20 47 views
0

考虑 -为什么带arg的构造函数undefine defualt的构造函数?

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 

但经过构造与ARGpublic 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)是谁?

回答

2

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

2

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

JLS

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

1

这是相反的。

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

0

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

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

相关问题