为什么Java中的抽象类具有构造函数?

gam*_*ver 56 java constructor abstract-class

为什么abstractJava 中的类有一个constructor

它构建的是什么,因为我们无法实例化一个abstract类?

有什么想法吗?

Uri*_*Uri 80

Java中的构造函数实际上并不"构建"对象,它用于初始化字段.

想象一下,你的抽象类有字段x和y,并且你总是希望它们以某种方式初始化,无论最终创建什么实际的具体子类.因此,您创建一个构造函数并初始化这些字段.

现在,如果您有两个不同的抽象类子类,当您实例化它们时,将调用它们的构造函数,然后将调用父构造函数并初始化字段.

如果您不执行任何操作,将调用父项的默认构造函数.但是,您可以使用super关键字来调用父类的特定构造函数.

  • 通常,如果考虑构造函数链的理论,那么在子构造函数执行之前首先调用父构造函数 (6认同)

Upu*_*ara 10

包括抽象类在内的所有类都可以有构造函数.当实例化其具体子类时,将调用抽象类构造函数


小智 10

有两个原因:

1)抽象类具有,constructors并且在实例化具体子类时始终调用这些构造函数.我们知道当我们要实例化一个类时,我们总是使用该类的构造函数.现在,每个构造函数都使用隐式调用来super()调用其超类的构造函数.

2)我们知道构造函数也用于初始化类的字段.我们也知道抽象类可能包含字段,有时需要使用构造函数以某种方式初始化它们.


Ric*_*uen 7

因为另一个类可以扩展它,并且子类需要调用超类构造函数.


Man*_*oid 5

我想这个问题的根源是人们相信对构造函数的调用会创建对象。事实并非如此。Java 无处声称构造函数调用会创建对象。它只是做我们想让构造函数做的事情,比如初始化一些字段......就是这样。所以抽象类的构造函数被调用并不意味着它的对象被创建。