jvm如何处理java中的抽象类

时间:2013-12-24 07:25:01

标签: java abstract

我在java中有一个关于抽象类的基本问题。

我们知道我们无法创建抽象类的实例,那么JVM如何处理java中抽象类的实例化。

我们可以在抽象类中定义一个参数化的构造函数,我们可以定义另一个扩展抽象类的构造函数。在这种情况下,谁创建抽象类的实例并调用抽象类的构造函数。

我想了解,JVM如何管理抽象类的对象创建。

3 个答案:

答案 0 :(得分:1)

JVM无法实例化一个抽象类,它只能实例化抽象类的非抽象子类的实例。创建实例意味着在内存中分配空间以保存所有非静态字段,然后通过调用构造函数来初始化这些字段。

答案 1 :(得分:0)

JVM无法实例化Interface或Abstract类。

看看this

在JVM中,每个对象都有一个指向其类的指针,但只指向其具体类,而不是指向其接口或抽象类。如果我们得到一个对象的内存地址,我们就可以轻松获得它的类的地址。此方法仅适用于可以创建实例的类。 无论是接口还是抽象类都不能以这种方式使用。

有关详细信息,请参阅this

如果是Abstract class并且具体SubClass,那么当你这样做时:

AbstractClass obj = new ConcreteClass();

new运算符创建一个ConcreteClass对象,并调用其构造函数来初始化所创建对象的状态。在此过程中,还从ConcreteClass构造函数调用抽象类的构造函数,以初始化抽象类中对象的状态。

因此,基本上没有创建AbstractClass的对象。只是它的构造函数被调用来初始化对象的状态。

答案 2 :(得分:0)

如果抽象类对象不是由JVM在内部创建的,但只调用其构造函数来初始化状态。然后,在没有实例化的情况下,初始化和执行对象初始化的重点是什么。