Java:使用继承引用外部类的数量

时间:2015-08-13 14:54:05

标签: java inheritance nested

每个非静态嵌套类都保留对其外部类的引用,以便访问外部类的方法和字段。

鉴于此课......

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实例。

1 个答案:

答案 0 :(得分:1)

您的理解没有错,因为每个Child类实例都是Parent类,因此Child类实例是NestedChild的外部封闭类

NestedChild类将只引用Child实例,因此这里没有内存问题.Java通过引用而不是实际的Object而不是C(没有指针的概念,只有引用).The Child实例保存引用到父类成员(请参阅对象图)。 对象引用是Object堆的一部分,类定义位于方法区域中。

为澄清而编辑:

尝试评论"扩展家长"从Child看,你会看到编译器抱怨NestedChild内部类没有包含Parent类型的封闭对象。