A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

如题,哪个默认的super();是怎么回事?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

6 个回复

倒序浏览
这个真的不太好说,语法规定就是这样的,子类继承与父类,先调用父类的构造方法,然后调用子类的构造方法。如果子类自己没有构造方法,则它将继承父类的无参数构造方法作为自己的构造方法;如果子类自己定义了构造方法,则在创建新对象时,它将先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。
回复 使用道具 举报
因为父类中的数据子类可以直接获取。所以子类对象在建立时需要先查看父类是如何对这些数据进行初始化的。因此,子类在对象初始化时要先访问一下父类中的构造函数。如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。如果父类中没有空参数的构造函数,那么在子类的构造函数中必须指定要访问的父类中的构造函数。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
个人理解是 jvm在子类的每个构造方法中都默认隐式添加了super()去调用父类的构造方法
而至于为什么调用
你可以这么想
当你在子类构造方法中调用了父类的成员变量
所以当然得先调用父类构造方法初始化父类成员变脸
再调用自身的构造方法
回复 使用道具 举报
毕老师的视频说的非常清楚了。二楼是正解
回复 使用道具 举报
子类为什么可以继承父类的属性,方法,是因为子类对象中包含一个父类对象,那么子类对象在创建过程中,就要先调用父类构造方法,先创建出父类对象,然后在创建出自己的对象,所以在子类构造方法中默认会调用父类无参的构造方法,也就是super(),如果你在子类构造方法中不写,系统会给你默认加上,前提是你父类必须有一个无参的构造方法,不然会报错。
回复 使用道具 举报
xiaoyi 中级黑马 2015-1-28 18:27:08
7#
比如父类有私有的成员变量
子类不能直接访问,这时用父类的构造方法就方便很多嘛
初始化时
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马