Java 父变量如何存储比父变量大的子变量?

Java 父变量如何存储比父变量大的子变量?,java,memory,methods,overriding,Java,Memory,Methods,Overriding,我现在是java初学者,对某些概念感到困惑 假设有一个父类和一个子类。方法在 两个。 如果我这样做: Parent p = new Child(); 如何准确地为对象分配内存? 假设父类的内存是32字节,子类有2个额外的字节,使其成为34字节 因此,32字节的父级如何准确地容纳34字节的子级?为了回答这个问题,您需要了解数据是如何存储在内存中的 当您声明基元数据类型的变量时,内存将为该数据分配存储空间。如果为该变量赋值,该值将存储在该空间中。 事物与客体不同。当您声明B类的对象变量时, 例如

我现在是java初学者,对某些概念感到困惑

假设有一个父类和一个子类。方法在 两个。 如果我这样做:

Parent p = new Child();
如何准确地为对象分配内存? 假设父类的内存是32字节,子类有2个额外的字节,使其成为34字节


因此,32字节的
父级
如何准确地容纳34字节的
子级

为了回答这个问题,您需要了解数据是如何存储在内存中的

当您声明基元数据类型的变量时,内存将为该数据分配存储空间。如果为该变量赋值,该值将存储在该空间中。

事物与客体不同。当您声明B类的对象变量时, 例如: “B obj_var;”
内存将分配一个空间内存,以将地址保存到具有B类属性的对象(同一类或扩展a的类)。如果只声明变量,它将包含null值

创建对象时,例如:“新建B() 该对象将在内存中创建,并将获得一个地址。在这种情况下,您不保存地址,因此无法访问或重用对象

如果您编写“B obj_var=new B();”,您可以同时执行3项操作: 1-在左侧创建一个对象变量。 2-在右侧创建一个对象。 3-将对象的地址分配给对象变量,因此对象的地址为 保存在对象变量中。 您可以访问下面的链接,了解有关数据如何存储在内存中的更多信息:

因此,您的问题的答案是,当您键入“Parent p”时,内存将为一个地址分配一个空间,因此它的大小将与计算机需要多少字节来表示一个地址有关,而不是与类有关。 键入“new Child()”时,子类的对象将按其自身大小创建。 由于子类是父类的子类,因此我们可以通过父类的对象变量“Parent p=new Child();”来引用子类


它不是存储在其父对象中的对象,而是存储在其对象变量中的对象地址

这就是你。。。真的不应该问自己。假设Java现在知道如何处理它的内存。但是,如果您真的想知道:将创建一个类型为
Child
的新实例(使用它的任何字节大小),并且
Parent p
将指向此对象的内存位置。Java中的所有内容都是参考值,因此
Parent p
只是指向内存位置,而没有自己的大小(与指针的大小不同)我不确定这与方法重写有什么关系?@jornverne我假设他们认为当你重写一个超类的方法与不重写它们时,内存中的某些东西会发生变化。我建议在刚接触Java时不要太在意这一点的原因是这样的。这其实不是一件应该关注的事情为了给出一个答案,wrt.overriding…Java中有三个内存区域:堆、堆栈和方法区域。类的方法(无论是静态的还是非静态的)只存储在方法区域中。Java记录哪些类的哪些方法存储在哪里。当您在对象上调用某个方法时,在运行时(动态)类型被确定,相应的方法被调用。因此,对象和它们的方法之间有一个分离。