问答详情
源自:7-6 Java 中的成员内部类

为什么访问外部类的中的b:那里不能 直接 Outer.b 而是要Outer.this.b

为什么访问外部类的中的b:那里不能 直接 Outer.b   而是要Outer.this.b

提问者:Motey 2015-06-27 21:40

个回答

  • 纸鸢丶
    2015-10-05 06:27:11

    我来说一个比较容易理解的。

    因为System.out.println这个指令在Inner里,它去输出变量的时候取的是就近的变量值,所以Outer.b取的是Inner类内的值,虽然写的是Out.b的值但实际上取的是Inner.b的值。

    Outer.this.b取的外部类的值可以理解成这里的this明确的是告诉程序取Outer这个类的变量值。因为上面那个实际上取的是Inner.b的值,所以不会去用Inner的b

    通俗点来讲就是如果我让你去买东西你肯定会找最近的商店去买(System.out.println取的就是最近的变量b,因为Inner的变量b离它最近),如果我指定你去一个远的商店里去买(Outer里的b),那你就必须去那里买,虽然Inner离你近但是你也不能去那里买。这里的this相当于Outer这个外部类。其实只要理解了this表示什么意思,这个问题不难理解。

    我个人是这样理解this的,this的左边是谁这个this就代表谁,如果this左边没有对象,那么这个this就表示当前this所在的这个类。

  • 无敌的大鹏鸟
    2015-07-24 10:59:26

    应该这么说,如果访问的外部类属性是静态的可以不用this,可以直接用外部类名.属性名,但如果是非静态的就必须用外部类名.this表示当前外部类的对象再加上.属性名,以表示访问的是外部类的属性

  • mindy88
    2015-07-18 21:36:09

    为什么不是Outer.b和Inner.b之间访问呢

  • lcmao
    2015-07-03 18:03:04

    我也有这样的疑问

  • 康振宁
    2015-06-29 10:42:27

    因为在内部类中也有个变量b,所以需要这样写