当地内部阶级的顺序

时间:2015-03-04 18:02:08

标签: java

为什么本地内部类依赖于定义的顺序。例如,首先定义的局部内部类不能为第一个本地内部类之后定义的类创建对象。

`package inner;

public class OuterClass {
    class Inner1{
        Inner2 ic=new Inner2(); // No compilation error 

    }
    class Inner2 {
        Inner1 in=new Inner1();
    }

    public static void main(String[] args) {
        class A2{
            A1 a=new A1(); // Compilation error
        }
        class A1{
            int a1;
            A2 a=new A2();
        }
    }
}
`

1 个答案:

答案 0 :(得分:3)

这是因为A2和A1是本地类,根据The Java Language Specification,第6.3节声明的范围:

  

由块直接包含的本地类声明的范围   (§14.2)是直接封闭区块的其余部分,包括其中   自己的班级声明。

由于范围是直接封闭块的其余部分,因此在声明之前不能使用本地类。

内部类与其封闭类的实例相关联,并且可以访问封闭类的其他成员。

内部类是其封闭类的成员,而作为内部类实例的对象存在于外部类的实例中。

您可以查看Nested Classes tutorial