Java:新建、继承和对象编号
我试图理解继承是如何在JVM中实现的。在我看来,如果我们有以下代码: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中的某个方
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
以字节码创建一个对象。多维数组是个例外。