2014-09-21 67 views
-3

我试着运行下面的代码,它给了我一个constructor A in class A cannot be applied to given types错误。空的构造函数的必要性

class A{ 
    int a; 
    A(int b){ 
     a = b; 
    } 
} 

public static void main (String[] args) throws java.lang.Exception 
{ 
    A a = new A(); 
    System.out.println(a.a); 
} 

如果删除从A类c'tor然而代码运行正常(和输出0)。看起来,如果存在另一个c'tor,则没有默认的c'tor(并且只有在写入时才存在更少的c'tor参数)。我对么? 更重要的是,这是为什么?

+1

是的,如果一个构造函数已经存在,编译器将不会创建另一个。为什么?那么,为什么编译器应该假设你总是需要一个公共的no-params构造函数呢? – 2014-09-21 16:01:00

+0

阅读:http://beginnersbook.com/2013/05/constructor-overloading/ – BatScream 2014-09-21 16:04:02

回答

2

如果不创建一个构造然后有一个构造器默认情况下,如下

public YourClass(){ 

} 

但是,如果你创建了以下构造:

public YourClass(int x){ 

} 

然后,你将不会有默认构造函数,即

public YourClass(){ 
//this won't exist 
} 

所以你必须做

YourClass anObject = new YourClass(5);//you can do this. 

,因此你不能这样做

YourClass anObject = new YourClass();//you cannot do this 

为了做到这一点,你需要自己为

public YourClass(){ 
//this time you must create this 
} 

对于这个问题为什么要创建一个构造函数?,我怀疑是否有任何理由。这是OOP移动的方式。

+0

不应该被接受吗? :-) – Nabin 2014-09-21 17:11:18

1

一旦你定义了一个非空的构造函数,那么这个非空conscrutor就没有含义,你必须解释它。

public A() { 
}