黑马程序员技术交流社区

标题: 内部类的访问问题 [打印本页]

作者: 江杰    时间: 2012-5-15 15:56
标题: 内部类的访问问题
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分别怎么办呢???看了视频还是没理解透彻啊!!!
作者: 冯心程    时间: 2012-5-15 16:03
x是5
this.x是4
Outer.this.x是3
如果4 和5 的定义都没有 那么X是3 因为省略的是Outer.this.x

楼主懂否{:soso_e121:}
作者: 黄或俊    时间: 2012-5-15 16:06
访问到的是5,它现在在方法里面找,方法里面有的就用方法里面的,找不到就去内部类找,再找不到就去外部类,逐层向外寻找
如果想要找4=====用this.x
如果想要找3=====用Outer.this.x
作者: 田林    时间: 2012-5-15 18:32
首先楼主有个错误: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
作者: 江杰    时间: 2012-5-15 18:39
冯心程 发表于 2012-5-15 16:03
x是5
this.x是4
Outer.this.x是3

明了,,,感谢
作者: 刘_浩    时间: 2012-5-15 23:19
楼上均为正解




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