Java: new, inheritance and objects 数

Java: new, inheritance and objects number

我想了解 JVM 内部是如何实现继承的。 在我看来,如果我们有如下代码:

class A {
  int aa;
}

class B extends A{
   int bb;
}
....
B b=new B();

在 JVM 内部 将创建三个对象:

  1. B 的对象(具有字段 int bb),
  2. A 的对象(具有字段 int aa
  3. Object 的对象。

程序员当然只看到classB的一个对象。我对吗?或者只创建了一个对象 inside JVM?

我的看法:

新returns参考B。为什么我这么认为(例如)如果我们在 B 中覆盖 A 中的某些方法,我们总是可以使用 super 获取它。除了在默认构造函数 B 中,第一行将调用默认构造函数 A ,其中我们只能在某个对象存在时调用该对象的构造函数。因此存在单独的 A 对象?

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

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

的结果合并

一开始,spec says没有指定对象的内部结构,所以理论上,一个JVM可以在内部创建多个对象,其中B只包含B新的字段,而一个link 到一个 A 对象,它包含 A.

的字段

它还说明了有关 Oracle JVM 实现的一些内容:class 实例包含三个指针。一个是方法 table,一个是实例字段数据所在的堆中的某个 space,一个是实例所属的 Class 对象。

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