1 编译不通过的原因
类A中缺少 无参构造函数
2 解决方案
给父类A添加一个无参构造函数
正确的代码如下:
class A {
A() {
}
A(int i) {
}
}
class B extends A {
B(int i) {
}
}
3 分析
在Java中,对于一个类来说
如果它没有定义构造函数,则编译器会为其生成一个 无参构造函数
如果它定义了构造函数,则编译器就不会为其生成无参构造函数了
下述代码中,
class A {
A(int i) {
}
}
class B extends A {
B(int i) {
}
}
类A中是没有无参构造函数的
但是当B继承A,则要求父类A中必须有 无参构造函数
所以报错
4 扩展
如下代码也是正确
class A {
}
class B extends A {
B(int i) {
}
}
原理是B类继承A类,所以B类的对象构造的时候必须先构造A类的部分,那么应该调用A的哪个构造函数? B类不知道,不知道就只好调用默认构造函数,但是没有。
所以有两种方法:
1. 给A类添加默认构造函数
2. 告诉B类的构造函数一开始先调用A类的A(int)这个特定的构造函数