黑马程序员技术交流社区
标题:
请问:子类在实例化时为什么必须先调用父类的构造方法之后再调用自身的构造方法?
[打印本页]
作者:
木羊
时间:
2015-1-27 01:56
标题:
请问:子类在实例化时为什么必须先调用父类的构造方法之后再调用自身的构造方法?
如题,哪个默认的super();是怎么回事?
作者:
邓士林
时间:
2015-1-27 08:34
这个真的不太好说,语法规定就是这样的,子类继承与父类,先调用父类的构造方法,然后调用子类的构造方法。
如果子类自己没有构造方法,则它将继承父类的无参数构造方法作为自己的构造方法;如果子类自己定义了构造方法,则在创建新对象时,它将先执行继承自父类的无参数构造方法,然后再执行自己的构造方法。
作者:
以利亚
时间:
2015-1-27 10:18
因为父类中的数据子类可以直接获取。所以子类对象在建立时需要先查看父类是如何对这些数据进行初始化的。因此,子类在对象初始化时要先访问一下父类中的构造函数。如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。如果父类中没有空参数的构造函数,那么在子类的构造函数中必须指定要访问的父类中的构造函数。
作者:
d342784178
时间:
2015-1-27 14:55
个人理解是 jvm在子类的每个构造方法中都默认隐式添加了super()去调用父类的构造方法
而至于为什么调用
你可以这么想
当你在子类构造方法中调用了父类的成员变量
所以当然得先调用父类构造方法初始化父类成员变脸
再调用自身的构造方法
作者:
刘聪聪
时间:
2015-1-28 10:09
毕老师的视频说的非常清楚了。二楼是正解
作者:
mengxiang1993
时间:
2015-1-28 10:38
子类为什么可以继承父类的属性,方法,是因为子类对象中包含一个父类对象,那么子类对象在创建过程中,就要先调用父类构造方法,先创建出父类对象,然后在创建出自己的对象,所以在子类构造方法中默认会调用父类无参的构造方法,也就是super(),如果你在子类构造方法中不写,系统会给你默认加上,前提是你父类必须有一个无参的构造方法,不然会报错。
作者:
xiaoyi
时间:
2015-1-28 18:27
比如父类有私有的成员变量
子类不能直接访问,这时用父类的构造方法就方便很多嘛
初始化时
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2