封闭 class 的每个实例是否都有自己的 inner/nonstatic-nested class 副本?

Does each instance of an enclosing class have its own copy of an inner/nonstatic-nested class?

我们说嵌套的 class 是封闭 class 的 成员

这是否意味着封闭 class 的每个实例都有其自己的 a(n) inner/nonstatic-nested class 副本,只是就像 class 的每个实例都有自己的 nonstatic/instance 方法副本?


我的问题与我问题上方横幅中链接的 question 不重复。

该问题讨论了内部 class 是否会自动保留对封闭 class 的引用(即使从未使用过该引用)。

我的问题是,因为 class 的所有实例都有自己的所有 非静态成员 字段(和方法?- 我不确定方法)的副本- 与只有一个副本的静态成员相反,该副本可用于 class 的所有实例;并且由于我们说嵌套 classes 是封闭 classes 的 成员 ,然后内部 classes 将变为 nonstatic/instance-成员 的封闭 classes,对吧?

那么可以得出结论,封闭 class 的每个实例都有每个内部 class 的副本吗?

我什至没有发现这两个问题相似,更不用说重复了。我真的很想知道我的问题的哪一部分与内部 class 相关,该内部 class 持有对封闭 class 的引用。

我的问题在接受的答案中得到了完美准确的回答。

Does this mean that each instance of the enclosing class has its own copy of a(n) inner/nonstatic-nested class,

封闭 class 的每个实例都可以被内部 class 的零个或多个实例引用。

内部 class 的每个实例都隐式引用了封闭 class 的一个实例。

顺便说一句,内部 class 是嵌套的 class,未声明为静态。 "Inner class" 包括匿名和非静态嵌套 classes.

我根据您提供的描述创建了一个小示例。如果我没有正确理解你,请纠正我,但这是我从你的描述中读到的。

public class Outer {
    class Inner {

    }

    public Inner inner = new Inner();

    public static void main(String... args) {
        Outer o1 = new Outer();
        Outer o2 = new Outer();

        System.out.println(o1.inner == o2.inner);
        System.out.println(o1.inner.getClass() == o2.inner.getClass());
    }

}

当你执行程序时,你可能会看到 Inner 的实例不相等,但内部实例的 类 是相等的。希望这能回答您的问题。