日期:2014-05-20 浏览次数:20674 次
class A{ A(){} } class B extends A{ B(){ //最前面默认有super(); 可以写,可以不写.没有写java会帮你加上,如果不存在A()的话,自然会出错了,要显式写明super(参数) } }
------解决方案--------------------
? 子类必须使用super调用父类中构造方法,如果父类中含有无参的构造方法可以使用隐式调用,如果父类中不包含无参的构造方法的时候我们必须显示的调用有参的构造方法。
------解决方案--------------------
因为你给类A重载了构造器,因此原本类A的无参构造器就已经不存在了,只能下public A(String){}。因此,你无法再调用类A无参构造器。另外,对于楼主的第二个问题,因为类B是类A的子类,当创建类B时候,JVM会自动创建其父类,直至Object。类B的构造器是可以调用类A的有参构造器的,其实这个不管类B的构造器是有参还是无参的,对于调用类A的哪个构造器,可以由程序员自己指定,前提是你调用的类的构造器存在!
------解决方案--------------------
子类默认调用父类无参的构造方法
假如父类没有无参的构造方法那子类只能显示的调用父类的有参的构造方法了
------解决方案--------------------
当然是调用了父类的带参数构造函数。关于构造函数可以参考一下这里:
http://blog.csdn.net/yidinghe/archive/2009/01/21/3839483.aspx