【发布时间】:2014-05-16 03:55:22
【问题描述】:
只是一个简单的问题,我希望有人能给出解释。
当类的构造函数没有使用“super”显式调用其超类的构造函数时会发生什么。同样,哪些情况会导致编译时错误?提前致谢!
【问题讨论】:
标签: java inheritance constructor
只是一个简单的问题,我希望有人能给出解释。
当类的构造函数没有使用“super”显式调用其超类的构造函数时会发生什么。同样,哪些情况会导致编译时错误?提前致谢!
【问题讨论】:
标签: java inheritance constructor
如果存在,它会隐式调用超类的默认构造函数,否则会导致编译器错误
【讨论】:
当类的构造函数没有使用“super”显式调用其superclass 的构造函数时。
子类中的 constrcutor 将具有 default call 到 no arg default constrcutor 的 super 类。
因此它调用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 类中明确定义任一默认构造函数
或
2) 从 B 中调用 A 的参数化构造函数,例如 int x =0; super(x); 明确
【讨论】: