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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kkopopo 中级黑马   /  2014-1-28 12:20  /  2722 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

num前面省略的关键字是啥?

代码如图所示:

QQ图片20140128121814.jpg (83.78 KB, 下载次数: 129)

QQ图片20140128121814.jpg

15 个回复

倒序浏览
super关键字
回复 使用道具 举报
省略的是super,this引用的对象中就没有num属性。
回复 使用道具 举报

为啥是super?  既然是继承 在继承后也就是说在子类中也有一个int num=4 ;在堆内存中存在2个num ,子类访问变量不是优先查找子类中的吗? 既然存在了 就直接调用自己的 也就是省略this.我理解的那点有出入?
毕老师的视频里也说是super  让我很费解!求指正!
回复 使用道具 举报
zhangchao 发表于 2014-1-28 13:09
省略的是super,this引用的对象中就没有num属性。

继承了父类的变量,怎么会没有?  堆内存中有几个num?
回复 使用道具 举报
是super
super和this的区别在于this代表所在函数所属对象的引用,而super代表的是子类对象的父类.
回复 使用道具 举报
jiangyutc 发表于 2014-1-28 13:36
是super
super和this的区别在于this代表所在函数所属对象的引用,而super代表的是子类对象的父类. ...

为啥是super?  既然是继承 在继承后也就是说在子类中也有一个int num=4 ;在堆内存中存在2个num ,子类访问变量不是优先查找子类中的吗? 既然存在了 就直接调用自己的 也就是省略this.我理解的那点有出入?
毕老师的视频里也说是super  让我很费解!求指正!
回复 使用道具 举报
kkopopo 发表于 2014-1-28 13:10
为啥是super?  既然是继承 在继承后也就是说在子类中也有一个int num=4 ;在堆内存中存在2个num ,子类访问 ...

this代表的是当前类的引用对象。
回复 使用道具 举报
lriu 初级黑马 2014-1-28 15:20:08
9#
本帖最后由 lriu 于 2014-1-28 15:22 编辑

this代表的是本类对象,而super代表的是父类对象。
Z类中并没有num这个变量,想要在Z类中调用父类(即F类)中的变量必须使用关键字super。
回复 使用道具 举报
IT人 中级黑马 2014-1-28 16:02:23
10#
那么内存中有几个NUM,子类不是继承父类的NUM了么,还是继承只是持有父类对象的引用
回复 使用道具 举报
IT人 发表于 2014-1-28 16:02
那么内存中有几个NUM,子类不是继承父类的NUM了么,还是继承只是持有父类对象的引用 ...

哥们我也是初学者!我觉得应该是2个!  此处this和super的结果一样,但是我觉的应该是this  觉的老师的视频讲解这个地方的时候有问题!
回复 使用道具 举报
kkopopo 发表于 2014-1-28 13:12
继承了父类的变量,怎么会没有?  堆内存中有几个num?

堆内存中只有一个num,就是子类持有父引用中的num
回复 使用道具 举报
子类想访问父类方法只有一个就是用super();
回复 使用道具 举报
就是super了
回复 使用道具 举报
省略的this,因为Z继承了F也有num这个成员变量,super是特定指向父类的中东西,是不能省略的
回复 使用道具 举报
省略的是this关键字。在构造函数中子类中省略的是super()。其实你可以理解为省略的是对象(this).num。
而this是代表当前对象。而不论是建立的父类对象还是子类对象。这个num面前省略的都是this。而且父类中没有输出语句。你就是实例化了父类对象。也无法打印父类中的num的。或者你可以在父类定义一个输出num的语句。这样就可以了。不过如果你可以再子类中的输出语句的num前面加上super。这样调用的就是父类中的num了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马