
局部内部类怎么访问其方法的同名变量? public class Outer { public void methodOuter() { int n = 100; class Inner { int n = 10; public void methodINner() { int n = 29; System.out.println("局部内部类的方法的 n:"+n); System.out.println("局部内部类的 n:"+this.n); System.out.println("外部类方法的 n"+____); } } Inner i = new Inner(); i.methodINner(); } } 萌新人傻了,复习局部内部类的时候突然整不明白了 虽然可以通过定义其他的变量名称来规避这种麻烦,但还是想搞明白,求大佬解惑
1 ZredoC OP |
2 ZredoC OP 贴不了代码。。蛋疼 |
3 ZredoC OP ``` public class Outer { public void methodOuter() { int n = 100; class Inner { int n = 10; public void methodINner() { int n = 29; System.out.println("局部内部类的方法的 n:"+n); System.out.println("局部内部类的 n:"+this.n); System.out.println("外部类方法的 n:"+____); } } Inner i = new Inner(); i.methodINner(); } } ``` |
4 amiwrong123 2019-10-13 20:04:48 +08:00 |
5 amiwrong123 2019-10-13 20:06:43 +08:00 提问前记得百度,网上博客一大堆 |
6 amiwrong123 2019-10-13 20:14:30 +08:00 不好意思,我看错了。我觉得好像没法访问吧。。应该外部类方法的 n 只是一个局部变量。而内部类只是说可以直接调用到外部类对象的成员,一个局部变量也不是个外部类的成员啊 |
8 ZredoC OP @amiwrong123 是可以访问的。。只是没有办法访问外部类方法内的 [同名] 局部变量,所以只能在赋值时改一下变量名尽量不要重名。 外部类里的成员变量可以直接类名.this.变量名访问,局部内部类要访问外部类方法的局部变量的话,外部类方法的局部变量加上 final 就可以直接访问了,而且从 java8 开始,只要该局部变量事实不变,final 可以省略掉了 ``` public class Outer { int a = 30; public void methodOuter() { int a = 100; class Inner { int n = 10; public void methodINner() { int n = 29; System.out.println("局部内部类的方法的 n:"+n); //29 System.out.println("局部内部类的 n:"+this.n); //10 System.out.println("外部类方法的 n:"+a); //100 System.out.println("外部类的 n:" +Outer.this.a); //30 } } Inner i = new Inner(); i.methodINner(); } } ``` |