编译时间错误和构造函数"超级"

时间:2014-05-16 03:55:22

标签: java inheritance constructor

这是一个简短的问题,我希望有人可以给出解释。

当一个类的构造函数没有使用" super显式调用其超类的构造函数时会发生什么。"同样,哪些情况会导致编译时出错?提前谢谢!

2 个答案:

答案 0 :(得分:3)

它隐式调用超类的默认构造函数(如果存在),否则会导致编译器错误

答案 1 :(得分:0)

当类的构造函数没有使用“superclass显式调用其super的构造函数时”。

子类中的constrcutor将default call no arg default constrcutorsuper

因此调用super class no arg default constructor.

如果super类没有no arg default constructor那么它肯定会抛出编译时错误。

让我们看一下场景

class A{

}

class B extends A{

}

这内部变为

class A{
A(){
}

}

class B extends A{
B(){
super();
}
}

这绝对可以作为A类中的默认构造函数没有错误。

现在如果A没有默认构造函数(当我们编写自己的构造函数时发生)

class A{
A(int a){

}

}

class B extends A{

}

这将是内部的

class A{
A(int a){

}

}

class B extends A{
B(){
super();//compile time error as no default constructor in class A
}
}

解决方案

1)在A类中明确定义默认的constrcutor

2)从B中调用A的参数化构造函数,如int x =0; super(x);明确地