Java中继承对象的堆内存分配:子类对象存储机制咨询
继承对象在JVM堆中的存储机制
当执行B b = new B(1, "b");时,JVM不会同时创建A类对象和B类对象,堆中只会生成一个单独的B类实例,这个实例包含了父类A的所有非静态成员变量,再加上自身的成员变量。
具体细节如下:
- 从内存布局上看,B对象的堆内存会先分配父类A的成员空间(这里就是
private int id),之后再分配自身的成员空间(private String name)。 - 构造函数中调用
super(id)的作用,是初始化当前B对象里属于父类A的那部分属性,而不是生成一个独立的A对象。父类构造函数的本质是协助完成子类对象的完整初始化。 - 类的元数据(比如类的结构、方法定义等)会存储在JVM的方法区中,A和B的类元数据是分开的,但堆中始终只有一个B实例。
你提供的代码示例:
public class A { private int id; public A(int id){ this.id=id; } } public class B extends A { private String name; public B(int id, String name){ super(id); this.name=name; } }
内容的提问来源于stack exchange,提问作者Muhammadqodir Yusupov
相关产品推荐
相关产品推荐

