Java继承最先遇到的问题
class C{
}
class B extends C{
public B(int a) {
}
}
class A extends B{
}
我们先来看这段代码,编译器中报错第9行代码。
为什么呢?
因为子类的构造器会默认访问父类的无参构造器,但是A的父类B类中,默认构造器被自己手动写的构造器覆盖掉了,所以默认的失效了,因此,A类无法访问父类B的无参构造器,所以报错,
因此可以这样改
class C{
}
class B extends C{
public B(int a) {
}
}
class A extends B{
public A() {
super(2);//里面的数字随便
}
}
或者这样
class C{
}
class B extends C{
public B() {
}
public B(int a) {
}
}
class A extends B{
}
对于上面那个问题,我之前有一个问题,既然A类要改,那B类中没有调用C类中的构造器,那不是也错了吗?
对于这个问题,回答是:无论是有参还是无参的构造器,都会默认访问父类的无参构造器,所以,对于B类来说,就算没有super语句,都会访问父类C的无参构造器。