假设我有一个A类和一个内部A.B类,并且在单独的类的方法中创建了一个A.B类的实例。
A obj1 = new A();
A.B obj2 = obj1.new B();
这是什么情况?它是obj1的一部分还是独立的对象?
据我了解,有一些实例是独立实体,例如1个苹果,1个人等。是否可以与内部类的对象进行类比?
最佳答案
B objectOfB1 = objectOfA1.new B();
B objectOfB2 = objectOfA2.new B();
暗示objectOfB1与objectOfA相关联。 objectOfB1具有由objectOfA1引用的对象的隐式引用。类似地,objectOfB2与objectOfA2相关联。
现在,即使objectOfA1 = null;完成后,A所引用的A对象也将不符合垃圾回收的条件,因为它从B类的对象内部进行了硬引用,即。 objectOfB1。
objectOfB1知道objectOfA1,反之亦然。您可以认为这就像我们将objectOfA1作为构造函数参数传递来创建objectOfB1一样。对于objectOfB2也是一样,它包含对objectOfA2的隐式引用。
class OuterClass{
InnerClass dataMem1;
InnerClass dataMem2;
class InnerClass{
int k;
}
}
这里,没有OuterClass的对象就不能存在InnerClass的对象,因此在编译时,外部编译器的引用将由It编译器注入。
并非完全按以下方式发生,但是您可以参考以下代码来理解,因为遵循上述代码时会发生非常相似的事情。
class OuterClass{
InnerClass dataMem1;
InnerClass dataMem2;
}
class InnerClass{
OuterClass objInjectedByCompiler;
int k;
// constructor
InnerClass(OuterClass objectOfOuter){
this.objInjectedByCompiler = objectOfOuter;
}
}
为了创建InnerClass对象,您需要一个OuterClass对象。
现在的问题应该是InnerClass的对象实际上如何获得OuterClass的对象。当我们执行
objOfOuter.new InnerClass()
时,与this
关联的objOfOuter
充当OuterClass类的所需对象。PS:以上内容适用于非静态嵌套类,而不适用于静态的内部嵌套类。