java - 内部类中顶级类成员的可访问性?

标签 java accessibility inner-classes nested-class

我有一个关于从成员内部类访问顶级类的查询。 我刚刚读过本地或匿名内部类只能访问最终变量的原因。原因是 JVM 将这两个类作为完全不同的类处理,因此,如果一个类中的变量值发生变化,则无法在运行时反射(reflect)出来另一个类文件中的时间。

然后,我的问题是,内部成员类(非静态)如何访问顶级类的成员,因为 JVM 仍然将这两个类视为不同的类文件?如果顶级类的成员变量的值发生变化,运行时如何反射(reflect)到内部类的类文件中?

最佳答案

它们是单独的类,但在“内部”类中隐式引用“外部”类的实例。它基本上充当一个变量,您可以隐式或通过 ContainingClassname.this 的特殊语法获取该变量。

请注意,如果您想要这样的隐式引用,则应该将嵌套类声明为静态:

public class Outer
{
    private class Inner
    {
        // There's an implicit reference to an instance of Outer in here.
        // For example:
        // Outer outer = Outer.this;
    }

    private static class Nested
    {
        // There's no implicit reference to an instance of Outer here.
    }
}

关于java - 内部类中顶级类成员的可访问性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6244208/

相关文章:

java - 未调用内部类的 paintComponent

java - 从内部匿名类调用外部类的函数(与外部相同的类)

java - Java 客户端 VM 和服务器 VM 之间有什么区别?

java - Jenkins 2.121.1 使用 TLS 1.0

ios - 如何在信号丢失时播放画外音通知(即没有用户交互)?

将缺失的辅助功能属性插入 HTML 标记的 Java 程序

ios - UICollectionView 中的画外音 - 缺少一些翻译

java - Android + MySQL 使用 com.mysql.jdbc.Driver

java - Spinner 无法与 Firestore 的 document.getId 配合良好

java - 安卓 : calling a user defined method causing application misbehave