因此,子类的构造器除了承担着初始化子类的新增变量和方法,还要初始化父类自身新增加的变量和方法。一般来说,如果在子类的构造器中没有使用super()调用父类相应的构造器,子类的构造器会自动调用父类默认的,也就是不带参数的构造器来初始化父类的东西。
而Java类的默认构造器,当你没有为你写的类建造构造器的时候,Java会自动帮你创建这个默认构造器,但是当你自己编写了构造器后,你自己编写构造器将会覆盖掉默认的构造器,就是说默认的构造器不存在。那么这个时候,你在继承的子类里面没有显示添加super()函数调用你在父类里编写的父类构造器,子类的构造器将不能自动找到父类的构造器。找不到父类的构造器意味着什么?意味着你的子类实例化的时候找不到父类的构造器来初始化父类的东西,不能完成类实例对象的初始化工作,你说你的子类能不出现错误?!
所以,在子类的构造器中需不需要添加super()调用父类相应的构造器,只需要考虑子类的构造器才初始化的时候能不能完成所有变量和方法的初始化就可以了。另外,根据自己初始化工作的需要使用super()调用相应的父类构造器来初始化也是有必要的。
所以你所说的子类不能继承父类构造器,这说明你没有显式的调用seper(),而且父类构造器被你的子类覆盖或调用的父类中没有无参构造器所引起的。
不可能,肯定是你其他地方写错了。,不如贴代码上来看看
class Father{public Father(){ //这个是父类构造器
}
}
class Child extends Father{ //子类继承父类不用写构造器
}你在Xx类里定义了一个带参数的构造方法,那么这个Xx类就没有无参数的构造方法了。
子类在继承父类时,如果没有相同的带参构造方法,那么他就需要在其构造方法中明确的通过super()调用父类的带参构造方法,否则构造不出父类,从而也构造不出他自己了。
你如果在父类中写个不带参数的构造方法,就可以不用实现父类的带参构造方法了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)