封闭类的每个实例都有自己的内部/非静态嵌套类的副本吗?

时间:2016-05-16 16:28:05

标签: java oop instance inner-classes

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

这是否意味着封闭类的每个实例都有自己的(n)内部/非静态嵌套的副本,就像类的每个实例都有自己的非静态副本一样/ instance方法?

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

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

我的问题是,因为类的所有实例都有自己的所有非静态成员字段的副本(和方法? - 我不确定方法) - 反对只有一个的静态成员所有类的实例都可以使用的副本;并且因为我们说嵌套类是封闭类的成员,然后内部类将成为封闭类的非静态/实例成员,对吗?

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

我甚至没有发现两个问题是相似的,更不用说重复了。我真的很想知道我的问题的哪一部分与一个内部类有关,它引用了封闭类。

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

2 个答案:

答案 0 :(得分:2)

我从你给出的描述中创建了一个小例子。如果我没有正确理解你,请纠正我,但这是我从你的描述中读到的。

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的实例不相等,但内部实例的类是。希望这能回答你的问题。

答案 1 :(得分:0)

  

这是否意味着封闭类的每个实例都有自己的(n)内部/非静态嵌套类的副本,

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

内部类的每个实例都具有对封闭类的一个实例的隐式引用。

顺便说一句,内部类是一个未声明为静态的嵌套类。 "内心阶层"包括匿名和非静态嵌套类。