黑马程序员技术交流社区

标题: 类名加this 和this [打印本页]

作者: itheima01    时间: 2013-5-24 17:41
标题: 类名加this 和this
本帖最后由 itheima01 于 2013-5-26 01:16 编辑

class A {
    int i  = 10;
    class B {
        int i = 20;
        out(A.this.i);
        out(this.i)
    }
}
A.this代表 A类的对象引用????
作者: 薛淑凯    时间: 2013-5-24 17:52
本帖最后由 薛淑凯 于 2013-5-24 18:03 编辑

内部类里A.this代表A对象本身,也就是调用的外部的i,直接调用i隐式省略了this,代表内部类本身
作者: 山鹰    时间: 2013-5-24 18:15
本帖最后由 山鹰 于 2013-5-24 18:18 编辑

LZ 这段代码ClassB是一个内部类  应该 (newB().i) 对象调用类名直接调用必须是静态变量
正确代码
class A{
        public static void main(String [] args)
{
     int i  = 10;
     class B {
         int i = 20;      
         
     }
         System.out.println(new B().i);//这个输出内部类B中的i

         System.out.println(i);//输出A类中的i
}

}
作者: 王靖远    时间: 2013-5-24 20:04
首先,内部类可以通过类名调用外部类的成员,也就是你示例中的A.this.i
内部类调用自己的成员也就是this.i了。
这里主要就是涉及一个内部类调用外部类成员的方法。
作者: 王浩骅    时间: 2013-5-24 20:12
楼主这是哪来的代码?代码有问题吧!我补全了也是有问题的!
作者: msileandroid    时间: 2013-5-24 22:03
内部类可以直接访问外部类中的成员。因为内部类持有了外部类的引用。  外部类名.this
作者: 神之梦    时间: 2013-5-25 01:23
楼主可以贴出完整程序么?
作者: itheima01    时间: 2013-5-26 01:31
神之梦 发表于 2013-5-25 01:23
楼主可以贴出完整程序么?

public class Test {
        int i = 10;
        class Test1 {
                int i = 20;
                public void run() {
                        System.out.println(Test.this.i);
                        System.out.println(this.i);
                }
        }
        public static void main(String[] args) {
                Test.Test1 tt = new Test().new Test1();
                tt.run();
        }




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