java - 另一个内部类的内部子类——对根类有多少引用?

标签 java subclass inner-classes memory-layout

假设我有结构

class A {
    class B {}
    class C extends B {}
}

似乎 C 的实例应该有 2 个对根类 A 的引用:第一个是从 B 父类(super class)继承的,第二个是自己的隐式内部类引用。我的问题:JVM (HotSpot) 是否优化了这种情况并只保留一个对根类的引用?

最佳答案

我反编译了 A.class 并得到了这个结果,它显示了对 A 的两个引用,一个来自 B,一个来自 C。但这实际上意味着 C 实际上有两个引用 - 一个是它自己的,另一个是从 B 继承的。

class A {

    class B {
        final A this$0;
        B() {
            this$0 = A.this;
        }
    }

    class C extends B {
        final A this$0;
        C() {
            this$0 = A.this;
        }
    }
}

关于java - 另一个内部类的内部子类——对根类有多少引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839111/

相关文章:

java - 如何使用 ZK 在 UI 中迭代和加载属性文件值?

java - 从 ArrayList 类继承出现问题, 'receiving non-static method can not be referenced in static context' 错误

c++ - error C2248,这是什么错误,我该如何解决?

java - 如何避免内部类的名称冲突?

java - 对角填充二维数组

java - 未封闭字 rune 字背后的算法

ios - 具有静态间距的 UIStackView 子类

java - 内部类中的 Hibernate session

c++ - 如何定义在两个类之外的模板类内部的非模板类中声明的友元函数?

java - 最小的合法 zip/jar 文件是什么?