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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

代码如下,输出结果都是5.....4,为什么第二个不是5.....5?谁给我解答一下,谢谢!
class Fu
{
        int num = 4;
        public int getNum()
        {
                return num;
        }
}
class Zi extends  Fu
{
        int num = 5;
        public int getNum()
        {
                return num;
        }
        void show()
        {
                System.out.println(this.num+"....."+super.getNum());
                System.out.println(this.num+"....."+this.getNum());
        }
}

class ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z = new Zi();
                z.show();
        }
}


11 个回复

正序浏览
redlake 发表于 2015-4-12 18:12
如果子类有相同的成员变量,父类的方法为什么不访问子类的变量而是父类的变量? ...

因为super是指向父类的地址空间的。当然是在父类找变量啦
回复 使用道具 举报
fantacyleo 发表于 2015-4-12 11:49
子类中如果有和父类同名的变量,那么就把父类的同名变量隐藏了,子类中默认访问的是子类的变量。如果要访问 ...

如果子类有相同的成员变量,父类的方法为什么不访问子类的变量而是父类的变量?

点评

我想想也能明白点,父类如果有很多子类呢……呵呵,有没有更高深的见解?  发表于 2015-4-12 18:14
回复 使用道具 举报
子类中如果有和父类同名的变量,那么就把父类的同名变量隐藏了,子类中默认访问的是子类的变量。如果要访问父类变量,就用super关键字
回复 使用道具 举报
同上,子类可以直接使用父类的方法。
回复 使用道具 举报
redlake 发表于 2015-4-12 11:39
发错了,其实我是想问这个
class Fu
{

子类里面没有getNum()方法,子类调用找不到自己的,只能去找父类的方法了

点评

有道理!谢谢解答!!  发表于 2015-4-12 13:51
回复 使用道具 举报
xlunaer 发表于 2015-4-12 11:28
我试了一下,结果没错

发错了,其实我是想问这个
class Fu
{
        int num = 4;
        public int getNum()
        {
                return num;
        }
}
class Zi extends  Fu
{
        int num = 5;
        void show()
        {
                System.out.println(this.num+"....."+super.getNum());
                System.out.println(this.num+"....."+this.getNum());
        }
}

class ExtendsDemo
{
        public static void main(String[] args)
        {
                Zi z = new Zi();
                z.show();
        }
}
回复 使用道具 举报
本帖最后由 pengcheng0328 于 2015-4-12 11:35 编辑

1、子类和父类如果有一样的方法,那么在访问子类时就会发生覆盖。2、super就是调用父类,this是调用当前类的,在上面的例子中就是调用子类的。

点评

谢谢解答!  发表于 2015-4-12 11:42
回复 使用道具 举报
我试了一下,结果没错

捕获.PNG (6.35 KB, 下载次数: 34)

捕获.PNG
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马