如何访问与内部类成员实例或内部类方法局部变量同名的方法变量?
class A{
int a = 10; //1
public void someMethodA(){
final int a = 20; //2
class B{
int a = 30; //3
public void someMethodB(){
int a = 40; //4
System.out.println("a = "+a); //access 4
System.out.println("a = "+this.a); //access 3
System.out.println("a = "+A.this.a); //access 1
System.out.println(?????); //how do I access value of a i.e 2
}
}
}
}
不,你不能那样做。原因是,变量a
就位2是一个局部变量,只能在封闭范围内使用其简单名称进行访问。从JLS §6.4:
局部变量(第 14.4 节)、形式参数(第 8.4.1 节)、异常参数(第 14.20 节)和局部类(第 14.3 节)只能使用简单名称(第 6.2 节)而不是限定名称( §6.6)。
现在,这表明您只能使用以下命令访问该变量a
。但是,方法局部类中有另一个变量B
它遮蔽了该局部变量a
就位2,它再次被位置中的局部变量遮蔽4.
现在在打印声明中,a
将从最近的封闭范围访问变量,即位置的局部变量4。如果删除该变量,它将在位置打印该变量3。然后如果你删除它,它会打印位置的变量2.
所以,重点是,没有办法访问局部变量a
在位置2,因为那是阴影。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)