黑马程序员技术交流社区

标题: 关于继承的问题 [打印本页]

作者: kkopopo    时间: 2014-1-28 12:20
标题: 关于继承的问题
num前面省略的关键字是啥?

代码如图所示:

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

QQ图片20140128121814.jpg

作者: 透过生活    时间: 2014-1-28 13:06
super关键字
作者: zhangchao    时间: 2014-1-28 13:09
省略的是super,this引用的对象中就没有num属性。
作者: kkopopo    时间: 2014-1-28 13:10
透过生活 发表于 2014-1-28 13:06
super关键字

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

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

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

this代表的是当前类的引用对象。
作者: lriu    时间: 2014-1-28 15:20
本帖最后由 lriu 于 2014-1-28 15:22 编辑

this代表的是本类对象,而super代表的是父类对象。
Z类中并没有num这个变量,想要在Z类中调用父类(即F类)中的变量必须使用关键字super。

作者: IT人    时间: 2014-1-28 16:02
那么内存中有几个NUM,子类不是继承父类的NUM了么,还是继承只是持有父类对象的引用
作者: kkopopo    时间: 2014-1-28 19:08
IT人 发表于 2014-1-28 16:02
那么内存中有几个NUM,子类不是继承父类的NUM了么,还是继承只是持有父类对象的引用 ...

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

堆内存中只有一个num,就是子类持有父引用中的num
作者: darkpiece    时间: 2014-1-28 22:49
子类想访问父类方法只有一个就是用super();
作者: dongdong5982    时间: 2014-1-28 23:13
就是super了
作者: 山治0712    时间: 2014-1-28 23:29
省略的this,因为Z继承了F也有num这个成员变量,super是特定指向父类的中东西,是不能省略的
作者: 追逐    时间: 2014-3-14 16:08
省略的是this关键字。在构造函数中子类中省略的是super()。其实你可以理解为省略的是对象(this).num。
而this是代表当前对象。而不论是建立的父类对象还是子类对象。这个num面前省略的都是this。而且父类中没有输出语句。你就是实例化了父类对象。也无法打印父类中的num的。或者你可以在父类定义一个输出num的语句。这样就可以了。不过如果你可以再子类中的输出语句的num前面加上super。这样调用的就是父类中的num了。




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