这是JLS 8.1.3定义词法包围类型概念的方式:


  类或接口O是第零个词汇包围类型
  自我声明。
  
  类O是类的第n个词法包围类型声明
  C,如果它是第n-1个的立即封闭类型声明
  词汇上包含C的类型声明。


因此,从该定义中不清楚是要考虑任何内部类,还是仅考虑类或接口O的内部类。这些是不同的概念,因为最后一个定义如下:


  内部类C是类或接口O的直接内部类,如果
  O是C的立即封闭类型声明,而O是
  C的声明不在静态上下文中发生。
  
  C类是类或接口O的内部类,如果它是
  O的直接内部类或O的内部类的内部类。


更清楚地说,让我提供一个示例:

class A{
    class Bar{ } //inner class of class A

    public static void main(String[] args){
        class Foo{ } //inner class, but not an inner class of class A
    }
}


DEMO

立即封闭类型的定义被认为是任何内部类或inner classes of class or interface O

最佳答案

BarFoo都将A作为立即封闭的类型声明。他们处于平等地位。方法声明也包含Foo的事实并不影响此。

关于java - 类的词法封闭类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27856338/

10-12 15:37
查看更多