假设我有一个类 A 和内部类 A.B ,我在单独的类的方法中创建了一个类A.B的实例。
$extension = strrchr($_FILES['uploadFile']['name'], '.');
if (!in_array($extension, $extensions)) {
$err[]='Wrong file format only .png , .gif, .jpg, .jpeg are accepted';
}
...
...
这个例子是什么?它是obj1的一部分还是独立的对象?
据我所知,某些实例是独立实体,例如1个苹果,1个人等。是否有可能与内部阶级的对象进行类比?
答案 0 :(得分:2)
B objectOfB1 = objectOfA1.new B();
B objectOfB2 = objectOfA2.new B();
暗示objectOfB1与objectOfA相关联。 objectOfB1具有objectOfA1引用的对象的隐式引用。类似地,objectOfB2与objectOfA2相关联。
现在即使objectOfA1 = null;然后,它所引用的A的对象也不符合垃圾收集的条件,因为它具有来自B类对象内部的硬引用。 objectOfB1。
objectOfB1知道objectOfA1但反之亦然。您可以将其视为我们将objectOfA1作为构造函数参数传递以创建objectOfB1。对于objectOfB2也是如此,它拥有对objectOfA2的隐式引用。
class OuterClass{
InnerClass dataMem1;
InnerClass dataMem2;
class InnerClass{
int k;
}
}
这里没有OuterClass的对象就不能存在InnerClass的Object,所以在编译时,编译器会在It中注入outerClass的引用。
不完全如下所示,但您可以参考以下代码以了解您的理解,因为在编写上述代码时会发生非常类似的事情。
class OuterClass{
InnerClass dataMem1;
InnerClass dataMem2;
}
class InnerClass{
OuterClass objInjectedByCompiler;
int k;
// constructor
InnerClass(OuterClass objectOfOuter){
this.objInjectedByCompiler = objectOfOuter;
}
}
要创建InnerClass的对象,您需要一个Object of OuterClass。
现在问题应该是InnerClass对象实际上如何获得OuterClass的对象。当我们执行objOfOuter.new InnerClass()
时,与this
相关联的objOfOuter
将作为类OuterClass的所需对象。
PS:以上适用于非静态嵌套类,而不适用于静态的内部嵌套类。