我尝试运行以下代码,这会给我一个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(并且只有在写入时才会出现更少的参数)。我对么?
更重要的是,为什么会这样?
答案 0 :(得分: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的移动方式。
答案 1 :(得分:1)
一旦你定义了一个非空的构造函数,非空的构造函数就不是隐含的,你必须明确它。
public A() {
}