子类带参构造里面已经super了父类的带参构造不应该就ok的吗 它为什么会编译错误呢

子类带参构造里面已经super了父类的带参构造不应该就ok的吗 它为什么会编译错误呢


http://img1.sycdn.imooc.com//climg/5b4cb2a6000115ab05400960.jpg子类有参构造不是已经super了父类的有参构造了吗

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
pfco 2018-08-23 17:19:01

意思是,不管你子类的有参还是无参构造,都首先调用的是父类的无参构造(在不用supper()的时候),题目中子类的无参构造并没有声明,所以调用的就是父类的无参构造,而父类并没有无参构造,所以会编译出错。

杨勤_cd 2018-07-25 20:06:48

题主的执行逻辑是对的,所以结论是可以运行成功并输出正确的结果;

但是就编译而言,只要子类中的构造方法,没有显示地指定使用父类的哪种构造方法,那么都会调用父类的无参构造方法,所以而本例中又没有定义父类的无参构造方法,所以会编译失败。

积木_0004 2018-07-22 11:14:24

实际执行试了下,如果把2这个显式的定义Truck的无参构造方法注释掉,就不会有编译报错。感觉应该是这样的: 要么都只显式定义了带参构造,不显式定义无参构造,这样的话就不会有问题。只要有子类显式定义了无参构造,不管new的时候是不是用的无参构造,只要是显式定义了,那么就要保证它的父类、以及父类的父类一直往上都有无参构造方法才行。

好帮手慕雪 2018-07-17 09:44:32

可是子类无参构造没有指明super父类走哪个构造呀,没有指定默认就是走的super的无参构造方法。而父类又没有无参构造方法,所以才报的错。祝:学习愉快

  • 还是不太明白,调用的时候不是用的带参构造吗?不是应该走到Trunk的带参构造里面去吗?Trunk的带参构造又通过super(color,motor)走到Car的带参构造。感觉没问题额。 为什么还会去走Trunk的无参构造哇。
    2018-07-22 10:51:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师