黑马程序员技术交流社区

标题: this和super调用的问题 [打印本页]

作者: Moonboy2014    时间: 2014-6-12 22:50
标题: this和super调用的问题
class Person
{
        int num = 4;
}
class Student extends Person
{
        void show()
        {
                System.out.println(num);
        }
}
---------new Student().show();-----
请教一下,这段代买的运行结果是啥,括号中的num前面是省略了啥,知道的麻烦详解一下,不胜感激
作者: 焦国军    时间: 2014-6-13 00:10
结果是4,括号中num省略了super,因为num是从父类Person中继承过来的,子类Student如果想调用父类中的变量的话,需要加super。如果你还感觉不清楚的话,可以自己测试一下,把int num = 4,换成private私有的即private int num = 4;再把System.out.println(num),换成System.out.println(this.num);运行一下,如果是这样的程序会报错,根据提示你就知道原因了
作者: 焦国军    时间: 2014-6-13 00:12
像这样的你只需要自己多测试测试就知道咋回事了
作者: Moonboy2014    时间: 2014-6-13 11:11
焦国军 发表于 2014-6-13 00:12
像这样的你只需要自己多测试测试就知道咋回事了

感谢:loveliness:
作者: jsjchenlong    时间: 2014-6-13 11:14
支持一下子。
作者: 喜爱    时间: 2014-6-13 11:51
表示支持!
作者: Piston    时间: 2014-6-13 11:58
其实运行一下。多打印下。或者 debugger 就能知道怎么运行了的。。多多debugger ..
作者: an1911    时间: 2014-6-13 12:47
学习下。。
作者: true    时间: 2014-6-13 12:50
多尝试一下,各种情况都试一次
作者: 奋斗2014    时间: 2014-6-13 13:00
好吧,我还没学到这里,之前的忘记了。
作者: 风吹落叶    时间: 2014-6-13 13:36
焦国军 发表于 2014-6-13 00:10
结果是4,括号中num省略了super,因为num是从父类Person中继承过来的,子类Student如果想调用父类中的变量 ...

牛逼 哈哈
作者: 小熊星座    时间: 2014-6-13 18:51
多试几次就明白了。
作者: Без_тебя    时间: 2014-6-13 22:30
其实很简单,如果子类中有和父类同名的成员变量,那么我们在调用的时候,没有用super的话,就是默认this,默认调用子类的,如果用了super就是调用父类的变量,但是如果子类中没有这个变量,只有父类中有,那么无需加super,默认便是super,因为子类里面没有嘛,所以输出4
作者: Moonboy2014    时间: 2014-6-14 23:12
jsjchenlong 发表于 2014-6-13 11:14
支持一下子。

感谢!:)




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