Java:新建、继承和对象编号

Java:新建、继承和对象编号,java,inheritance,jvm,Java,Inheritance,Jvm,我试图理解继承是如何在JVM中实现的。在我看来,如果我们有以下代码: class A { int aa; } class B extends A{ int bb; } .... B b=new B(); 在JVM中,将创建三个对象: B的对象(带有字段int-bb) A的对象(带有int aa字段) 对象的对象 当然,程序员只能看到类B的一个对象。我说得对吗?或者在JVM中只创建了一个对象 我的想法是: 新函数返回对B的引用。我这样认为的原因是(例如)如果我们在B中重写A中的某个方

我试图理解继承是如何在JVM中实现的。在我看来,如果我们有以下代码:

class A {
  int aa;
}

class B extends A{
   int bb;
}
....
B b=new B();
在JVM中,将创建三个对象:

  • B
    的对象(带有字段
    int-bb
  • A的对象
    (带有
    int aa
    字段)
  • 对象的对象
  • 当然,程序员只能看到类
    B
    的一个对象。我说得对吗?或者在JVM中只创建了一个对象

    我的想法是:


    新函数返回对
    B
    的引用。我这样认为的原因是(例如)如果我们在
    B
    中重写
    A
    中的某个方法,我们总是可以使用
    super
    获得它。除此之外,在默认构造函数
    B
    中,第一行将被调用为默认构造函数
    A
    ,在该行中,只有当某个对象存在时,我们才能调用该对象上的构造函数。因此,一个独立的
    对象存在?

    这里只创建一个对象。它是B对象。但是B对象具有对象的状态和行为。由于每个类的超类型都是对象类,所以B对象也有对象的状态和行为。感谢

    类代表一种对象类型,但只有实例才能创建真实的对象。因此,只创建了一个对象,它对应于类B与类A的结果合并。

    首先,对象的内部结构没有指定,因此理论上,JVM可以在内部创建多个对象,其中B只包含B的新字段,以及指向A对象的链接,A对象包含A的字段

    它还介绍了Oracle JVM实现:一个类实例包含三个指针。一个是方法表,一个是实例字段数据所在的堆中的某个空间,一个是实例所属的类对象


    由此可以得出结论,每个创建的对象只有一个实例,即B的实例。该实例的方法表包含来自B、A和object的所有方法,堆空间包含来自B、A(和object)字段的所有数据.

    您不想使用
    jvm
    继承
    标记来回答您的问题有什么原因吗?请开导me@User42非常感谢。我添加了这些标记。关键字
    new
    以字节码创建一个对象。多维数组是个例外。