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 内部 将创建三个对象:
B
的对象(具有字段 int bb
),
A
的对象(具有字段 int aa
)
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(和对象)的字段的所有数据。
我想了解 JVM 内部是如何实现继承的。 在我看来,如果我们有如下代码:
class A {
int aa;
}
class B extends A{
int bb;
}
....
B b=new B();
在 JVM 内部 将创建三个对象:
B
的对象(具有字段int bb
),A
的对象(具有字段int aa
)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(和对象)的字段的所有数据。