每个非静态嵌套类都保留对其外部类的引用,以便访问外部类的方法和字段。
鉴于此课......
class Parent
{
// some fields
// some methods
protected class NestedParent
{
// some other fields
// some other methods
}
}
......和这堂课:
class Child extends Parent
{
// some fields
// some methods
protected class NestedChild extends NestedParent
{
// some other fields
// some other methods
}
}
类NestedParent具有对其外部类Parent的引用;因为NestedChild继承自NestedParent,它也会有这个引用。但是,NestedChild是否也会单独引用Child或是否会使用继承的引用并将其强制转换为Child以访问Child的成员?
我问这个问题是因为我想弄清楚NestedChild的最终大小。如果它有一个4字节的额外引用,那么我正在处理的项目中存在很大的内存浪费,因为将有数百万个NestedChild实例。
答案 0 :(得分:1)
您的理解没有错,因为每个Child类实例都是Parent类,因此Child类实例是NestedChild的外部封闭类
NestedChild类将只引用Child实例,因此这里没有内存问题.Java通过引用而不是实际的Object而不是C(没有指针的概念,只有引用).The Child实例保存引用到父类成员(请参阅对象图)。 对象引用是Object堆的一部分,类定义位于方法区域中。
为澄清而编辑:
尝试评论"扩展家长"从Child看,你会看到编译器抱怨NestedChild内部类没有包含Parent类型的封闭对象。