黑马程序员技术交流社区

标题: 关于super关键字 [打印本页]

作者: haozi050    时间: 2014-1-27 17:08
标题: 关于super关键字

打印super时,会报错。而打印this时是对象的地址。super到底是什么,怎么理解?


作者: xiaochen33520    时间: 2014-1-27 17:22
super和this的区别在于this代表所在函数所属对象的引用,而super代表的是子类对象的父类.
super.属性代表父类的属性.在构造函数中super()代表的是父类空参构造函数,每次子类对象在初始化过程中肯定会运行父类的构造函数,因为子类的构造函数第一行有一调隐式super()构造函数(在不指定调用父类构造函数时).
子类在new对象时,会在堆中开辟一块空间,子类对象的引用变量会指向这块堆的地址,所以this是有地址的,
而子类在new对象时,会调用父类的构造函数,但是,父类在初始化时并没有在堆中开辟内存空间,只是把数据存在了子类对象中。这是我的理解。
作者: zhangchao    时间: 2014-1-27 20:44
xiaochen33520 发表于 2014-1-27 17:22
super和this的区别在于this代表所在函数所属对象的引用,而super代表的是子类对象的父类.
super.属性代表父 ...

你的回答很完美,事实就是这样的:victory:
作者: 追逐    时间: 2014-3-14 16:14
super是对父类的引用,假如你想在子类中调用父类中的函数或者变量时,都可以在前面加上super,这样调用的就是父类中的变量或者函数。如果不加super系统就默认调用子类中的变量或者函数。因为子类中所有的变量和函数。前面都默认的省略了this关键字。当然构造函数除外。在继承中。构造函数中的第一句默认的是super();表示调用父类中的无参数构造函数。如果父类中定义了有参数的构造函数。子类中必须手动定义super(父类中的参数);




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2