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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© haozi050 中级黑马   /  2014-1-27 17:08  /  1596 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

4 个回复

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

点评

回答的真不错,赞一个  发表于 2014-1-28 13:26

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1 很给力!

查看全部评分

回复 使用道具 举报
xiaochen33520 发表于 2014-1-27 17:22
super和this的区别在于this代表所在函数所属对象的引用,而super代表的是子类对象的父类.
super.属性代表父 ...

你的回答很完美,事实就是这样的:victory:
回复 使用道具 举报
super是对父类的引用,假如你想在子类中调用父类中的函数或者变量时,都可以在前面加上super,这样调用的就是父类中的变量或者函数。如果不加super系统就默认调用子类中的变量或者函数。因为子类中所有的变量和函数。前面都默认的省略了this关键字。当然构造函数除外。在继承中。构造函数中的第一句默认的是super();表示调用父类中的无参数构造函数。如果父类中定义了有参数的构造函数。子类中必须手动定义super(父类中的参数);
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马