繁体   English   中英

内存分配是基于引用类还是实例类?

[英]Memory allocation is based on reference class or instance class?

我在java中有一个非常转储的问题。 堆中每个java对象的内存分配将基于引用类或实例类?

    public static void main(String[] a){
    MemoryParent parChild = new MemoryChild();
}

在上面的例子中,对象parChild的内存分配是基于MemoryChild还是MemoryParent? 我猜它基于实例类MemoryChild。 有人可以澄清一下吗?

提前致谢。

当你调用new时会发生内存分配。 因此,分配的内存是MemoryChild的大小。

这很好,因为MemoryParent可能比MemoryChild

它基于它的类型,而不是它所指的类型。 在您的情况下,对象 MemoryChild ,因此使用该对象。

可以这样想:如果我称你为“新SO用户”,你仍然是“@Subbu”。 仅仅因为我用不同的类型引用你并不会改变你的样子。

它是MemoryChild类型,因此占用MemoryChild占用的空间,运行MemoryChild具有的方法等等。

但是,在您编写的代码中,您只能将其视为MemoryParent,因此如果您在MemoryChild上有在MemoryParent中声明的方法,则无法调用它们。

因此,MemoryParent基本上是parChild的静态或编译时类型,而MemoryChild是parChild的动态或运行时类型。

MemoryParent parChild = new MemoryChild();

这意味着creating object of MemoryChild and Assigning to Reference of super class MemoryParent.

所以基于内存分配的实例类而不是它引用的类的类型。

要详细了解内存分配,请参阅问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM