jvm如何处理java中的抽象类

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

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

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

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

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

JVM无法实例化Interface或Abstract类。

看看这个 。

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

有关详细信息,请参阅此

Abstract class的情况下,它是具体的SubClass ,当你这样做时:

 AbstractClass obj = new ConcreteClass(); 

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

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

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