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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 江杰 初级黑马   /  2012-5-15 15:56  /  1727 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

static class AbsDemo
{
                abstract void show();
}
class Outer
{
        int x= 3;
        /*
        class  Inner extends AbsDemo
        {  int x= 4;
                void show()
                {       int x=5;
                        system.out.println("show:"+x);//复写
               
                }
        }
我这里定义了一个类 和内部类,这个x到底访问到了那个,要是要访问3,4,5分别怎么办呢???看了视频还是没理解透彻啊!!!

评分

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

查看全部评分

5 个回复

倒序浏览
x是5
this.x是4
Outer.this.x是3
如果4 和5 的定义都没有 那么X是3 因为省略的是Outer.this.x

楼主懂否{:soso_e121:}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
访问到的是5,它现在在方法里面找,方法里面有的就用方法里面的,找不到就去内部类找,再找不到就去外部类,逐层向外寻找
如果想要找4=====用this.x
如果想要找3=====用Outer.this.x

评分

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

查看全部评分

回复 使用道具 举报
首先楼主有个错误:static修饰的类必须是内部类。而AbsDemo不是内部类,所以不能被static修饰。
下面代码可以帮楼主理解x到底访问哪个值:
public class Test2 {

        public static void main(String[] args) {

                Outer.Inner inner = new Outer().new Inner();    //生成一个内部类引用
                inner.show();
        }
}

class Outer {
        int x = 3;

        class Inner {
                int x = 4;

                void show() {
                        int x = 5;
                        System.out.println("show:" + x); // 内部类方法中的x
                        System.out.println("show:" + this.x); // 内部类中的成员变量x
                        System.out.println("show:" + Outer.this.x); // 外部类中的成员变量x

                }
        }
}
打印结果为:
show:5
show:4
show:3

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
冯心程 发表于 2012-5-15 16:03
x是5
this.x是4
Outer.this.x是3

明了,,,感谢
回复 使用道具 举报
楼上均为正解
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马