为什么访问外部类的中的b:那里不能 直接 Outer.b 而是要Outer.this.b
我来说一个比较容易理解的。
因为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所在的这个类。
应该这么说,如果访问的外部类属性是静态的可以不用this,可以直接用外部类名.属性名,但如果是非静态的就必须用外部类名.this表示当前外部类的对象再加上.属性名,以表示访问的是外部类的属性
为什么不是Outer.b和Inner.b之间访问呢
我也有这样的疑问
因为在内部类中也有个变量b,所以需要这样写