gpt4 book ai didi

java - 与内部类意识的混淆

转载 作者:行者123 更新时间:2023-11-30 02:56:48 25 4
gpt4 key购买 nike

假设我有一个类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 对象也将不符合垃圾回收条件,因为它具有来自 B 类对象内部的硬引用,即B1 对象。

objectOfB1 知道 objectOfA1,但反之则不然。您可以认为我们将 objectOfA1 作为构造函数参数传递来创建 objectOfB1。 objectOfB2 也是如此,它持有对 objectOfA2 的隐式引用。

class OuterClass{
InnerClass dataMem1;
InnerClass dataMem2;

class InnerClass{
int k;
}

}

这里,如果没有 OuterClass 对象,InnerClass 对象就不能存在,因此编译时,编译器会在 It 中注入(inject) OuterClass 的引用。

并不完全是这样,但您可以引用下面的代码来理解,因为编译上面的代码时会发生非常类似的事情。

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() 时,与 objOfOuter 关联的 this 将充当类 OuterClass 所需的对象。

PS:以上适用于非静态嵌套类,但不适用于静态的内部嵌套类。

关于java - 与内部类意识的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37032177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com