35

在内部类中,外部类的变量是可访问的,但方法的局部变量是不可访问的。我了解有关方法的局部变量不可访问的部分,但我想知道为什么外部类变量可以访问?

我的理解是,由于内部类与外部类绑定,所以只要父级可用,子级就可以访问其父级变量。我对么?

4

2 回答 2

60

Outer假设从内部类(非静态)的范围内调用了您的外部类,Outer.this.foo以获取该字段。

例如,

Outer.this.foo=new ArrayList<>();

其中 Outer 是类的名称并foo标识字段。

您也可以直接抓取它,foo=new Baz()但如果由于阴影而存在命名冲突,它将选择内部字段。

如果它是静态内部类,则需要一个显式实例:

outerInstance.foo=new ArrayList<>();

或者如果要访问的字段是静态的,请照常使用:

Outer.staticFoo=new ArrayList<>();
于 2013-07-10T19:05:35.000 回答
1

答:由于词法作用域,Java 中的外部类变量是可访问的。

什么是词法作用域?

按编写代码的顺序定义的范围。假设您的班级结构如下

OuterMost  
   --Inner  
     --InnerMost

然后最内层的类将能够从最内层和最外层访问变量。

于 2016-02-10T11:57:45.393 回答