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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Fu
{
   int num= 4;//要是私有不能访问。
}


class Zi  extends Fu
{
                int num=5;
        void show()
        {
                System.out.println(num);//父类对象的引用
        }
}


class  ExtendsDemo2
{
        public static void main(String[] args)
        {
                Zi z= new Zi();
                   z.show();
                System.out.println(z.num+ "............."+z.num);
        }
}
这个的结果是:4
             4.........4
要是把show函数中的改成System.out.println(super.num);结果就会是
            4
                  5...........5
这个不是有super了 不应该是
            5
                  5............5吗

怎么还会输出4呢,内存的调用步骤到底是怎么样的,??
谢谢大家了。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

6 个回复

倒序浏览
class Fu
{
   int num= 4;//要是私有不能访问。
}


class Zi  extends Fu
{
                int num=5;
        void show()
        {
                System.out.println(num);//父类对象的引用
        }
}


class  ExtendsDemo2
{
        public static void main(String[] args)
        {
                Zi z= new Zi();
                   z.show();
                System.out.println(z.num+ "............."+z.num);
        }
}
这个的结果是:4
             4.........4

应该是:5
     5.........5 才对吧!因为子类继承父类,变量不会被覆盖,这个时候num前面有个隐式的this,也就是调用自身的变量,为不是父类的

要是把show函数中的改成System.out.println(super.num);结果就会是
            4   //这里的4调用的是show函数里的num,函数里的num因为加了super所以调用的父类的num=4;
                  5...........5  //这里的两个5调用的是子类的变量num=5,与函数里的num无关,没有起到赋值或者覆盖效果,所以还是子类自身的5

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 黄色字太刺眼了 - -!

查看全部评分

回复 使用道具 举报
本帖最后由 隋营营 于 2012-5-7 11:42 编辑

第一次的输出结果错了!应该是:
5
5.............5

改为:super.num 后输出结果是:
4
5.............5

虽然 Zi 继承了 Fu 的成员 , 但在内存中 引用 z 能直接访问到的只有自己的成员,
要访问父类的成员必须使用super——super.num 表示调用父类的num

2012-05-07_112016.png (12.74 KB, 下载次数: 35)

2012-05-07_112016.png

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 赞一个!

查看全部评分

回复 使用道具 举报
隋营营 发表于 2012-5-7 11:40
第一次的输出结果错了!应该是:
5
5.............5

这个明了,多谢
回复 使用道具 举报
谭景宾 发表于 2012-5-7 11:22
class Fu
{
   int num= 4;//要是私有不能访问。

多谢作答,
回复 使用道具 举报
关于能不能访问

   int num= 4;//要是私有不能访问
不能,因为private的权限是必须是同一个类,你这个是不同类
如果想实现可以用内部类
回复 使用道具 举报
class Fu
{
   int num= 4;//要是私有不能访问。
}


class Zi  extends Fu
{
                int num=5;
        void show()
        {
                System.out.println(num);//父类对象的引用
        }
}


class  ExtendsDemo2
{
        public static void main(String[] args)
        {
                Zi z= new Zi();
                   z.show();
                System.out.println(z.num+ "............."+z.num);
        }
}
这个的结果是:4
             4.........4谁说结果是44。。。4了?你创建子类对象,子类中的show方法会先找
自己的成员变量,怎么都不会是444
要是把show函数中的改成System.out.println(super.num);结果就会是
            4
                  5...........5
这个不是有super了 不应该是
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马