【问题标题】:Inner Classes and Enclosing Instances in java?java中的内部类和封闭实例?
【发布时间】:2015-05-21 11:30:14
【问题描述】:

在阅读 java Doc 时,我得到了以下信息。

  1. 如果 O 是 C 的直接词法封闭类并且 C 的声明不在静态上下文中,则内部类 C 是 O 类的直接内部类

所以如果我写

public class O{
    class Inner1{
        //
    }
    class Inner2{

    }
}

我的问题是在这两个内部类中哪一个是 O 的直接内部类?

我也得到了一些要点。

2.如果类 O 是 C 的第 n-1 个词法封闭类的直接封闭类,则它是 C 类的第 n 个词法封闭类。

3. 类 O 的直接内部类 C 的实例 i 与 O 的实例相关联,称为 i 的直接封闭实例。对象的直接封闭实例(如果有)在创建对象时确定。

4. 对象 o 是其自身的第零个词法封闭实例。

5.如果对象 o 是 i 的第 n-1 个词法封闭实例的直接封闭实例,则它是实例 i 的第 n 个词法封闭实例。

6. 在静态上下文中声明的内部类 I 的实例没有词法封闭实例。但是,如果 I 立即在静态方法或静态初始化程序中声明,那么我确实有一个封闭块,它是最里面的块语句,词法上封闭了 I 的声明。

7. 对于 C 的每个超类 S,它本身就是类 SO 的直接内部类,都有一个与 i 关联的 SO 实例,称为 i 相对于 S 的直接封闭实例。直接封闭实例当通过显式构造函数调用语句调用超类构造函数时确定对象与其类的直接超类(如果有)的关系。

8.当内部类(其声明不在静态上下文中)引用作为词法封闭类成员的实例变量时,使用相应的词法封闭实例的变量。

请用简单的术语向我解释这些事情,因为在阅读这些内容时似乎已经很混乱了

【问题讨论】:

    标签: java class


    【解决方案1】:

    它们都是因为OInner1Inner2 的直接词法封闭类。

    注意“a

    如果 O 是 立即在词法上封闭 C 的类和 C 的声明 不会发生在静态上下文中

    不一定只有一个。可以有很多。

    【讨论】:

    • O 的实例是Inner1 实例的第一个词法封闭实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-02
    • 2012-11-05
    • 1970-01-01
    相关资源
    最近更新 更多