黑马程序员技术交流社区

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

作者: 郑强强    时间: 2012-4-11 13:37
标题: 内部类的问题
class Outer
{
        int x=3;
        void method()
        {
                final int y = 4;
                class Inner//局部内部类不可定义静态成员
                {
                        void function()
                        {
                                System.out.println(Outer.this.x);                        }
                }
                new Inner().function();
        }
}


class InnerClassDemo4
{
        public static void main(String[] args)
        {
                new Outer().method();
                System.out.println("Hello World!");
        }
}


代码中的红色部分Outer.this.x代表的是什么意思啊,为什么不能改成OuterInner().x啊??
作者: 尹博    时间: 2012-4-11 13:49
Inner是类名,用类名只能直接访问类中的静态成员,这里Inner中的function()方法是非静态的,所以只能用对象名访问,在建立对象之前并不知道对象名,所以用this表示,因此不能用Outer.Inner().x而用Outer.this.x
作者: 李敏    时间: 2012-4-11 13:54
若外部类属性,内部类属性,内部类方法变量同名,则其访问方式分别是:
        访问外部类的属性:外部类类名.this.属性
        访问内部类属性:this.属性
        访问内部类方法的局部变量:属性

作者: 李敏    时间: 2012-4-11 13:55
若外部类属性,内部类属性,内部类方法变量同名,则其访问方式分别是:
        访问外部类的属性:外部类类名.this.属性
        访问内部类属性:this.属性
        访问内部类方法的局部变量:属性

作者: 邓斌    时间: 2012-4-11 14:18
Outer.this.x   这是访问外部类变量x
this  代表它在函数所属对象的引用
this.x  代表它在函数所属对象的x。
那我想用外部类的x .外部类谁的x 就加上类名.谁调用就用谁类名。
Outer.this.x


作者: 石好强    时间: 2012-4-11 14:33
内部成员不是静态的不能直接 类型.成员  来调用。
Outer.this.x  这里Outer 是外部类,this 是现在未知的将来会调用 x 变量的对象。
作者: 金兴    时间: 2012-4-11 15:38
Outer.this.x 这句指引用 Outer类中的成员变量,内部类的变量引用 直接用this.变量名 就行了   
变量名在内存中的运行图::





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