我在java中有一个关于抽象类的基本问题。
我们知道我们无法创建抽象类的实例,那么JVM如何处理java中抽象类的实例化。
我们可以在抽象类中定义一个参数化的构造函数,我们可以定义另一个扩展抽象类的构造函数。在这种情况下,谁创建抽象类的实例并调用抽象类的构造函数。
我想了解,JVM如何管理抽象类的对象创建。
答案 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在内部创建的,但只调用其构造函数来初始化状态。然后,在没有实例化的情况下,初始化和执行对象初始化的重点是什么。