2

假设我有结构

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

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

4

1 回答 1

1

我反编译了 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;
        }
    }
}
于 2013-07-24T16:07:39.140 回答