局部变量和局部内部类的变量重名时,怎么在内部类中获取局部变量


class Outer {
    int i = 1;

    public void x() {
        int i = 10;
        class Inner {
            private int i = 2;

            public void x() {
                System.out.println(i);//内部类的i
                System.out.println(Outer.this.i);//外部类的i
                System.out.println("??");//怎么访问局部变量的i ?
            }
        }
        Inner inner = new Inner();
        inner.x();
    }
}

public class Main {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.x();
    }
}

局部变量int i=10;如何在内部类中访问

基于Monster 组和GPT的调写:

  • 用关键字this来引用外部类的成员变量,final关键字修饰局部变量来让内部类可以访问。

  • 内部类中用Outer.this.i来访问外部类的成员变量,用final int j = i;来创建一个常量,然后在内部类中用j来访问局部变量。

修改后的代码如下:

class Outer {
    int i = 1;

    public void x() {
        int i = 10;
        final int j = i;
        class Inner {
            private int i = 2;

            public void x() {
                System.out.println(i);//内部类的i
                System.out.println(Outer.this.i);//外部类的i
                System.out.println(j);//局部变量的i
            }
        }
        Inner inner = new Inner();
        inner.x();
    }
}

public class Main {
    public static void main(String[] args) {
        Outer o = new Outer();
        o.x();
    }
}


输出结果为:

img

提供public方法,通过对象名.方法访问。