实例化Java中的抽象类

时间:2019-06-13 09:34:46

标签: java abstract-class

我正在学习OOP概念。在阅读有关继承的内容时,我了解到超类必须在初始化子类之前进行初始化,即所有超类的构造函数必须在子类构造函数之前运行。另外,我们可以直接创建超类的实例。例如。

SuperClass superClass = new SuperClass();

现在,我遇到了抽象类。看来我们无法实例化一个抽象类。要使用抽象类,您必须从另一个类继承它,并为其中的抽象方法提供实现。

我的问题是,在实例化具体子类时,将在具体子类的构造函数之前调用抽象超类的构造函数。如果是这种情况,为什么我不能直接实例化Abstract超类?

1 个答案:

答案 0 :(得分:3)

抽象类就像没有轮子的自行车。它具有为车轮定义的空间,但自行车架卖家将车轮的类型留给最终卖家。它只是指出了轮子应该安装在框架上的位置以及要使用的螺栓。自行车上有一条链条,该链条指向后轮应该去的地方,以便在转动脚踏板时,后轮将向前推进。

Bike without wheels.

您可以尝试骑那辆自行车,但是如果没有安装轮子,它就不会运动。由于没有轮子可以转动脚架,因此会发生错误。

您需要具体的卖方来定义轮子是否可以运行,只要它们以预定的方式连接即可。

square wheel bike
图片由https://www.flickr.com/photos/vrogy/拍摄,已获得CC-BY 2.0许可

因此,尝试骑不带轮的自行车就是尝试​​实例化抽象类。
即使您可以使用它,它也没有用,而且由于缺少轮子而在向前兜售时也会抛出错误。

实例化方轮自行车时,它将正常工作,并在向前兜售时向前移动。

超类的实例纯粹是要附加的链条,方向盘能够移动,鞍座的高度已设置,所有标准特征(不包括已设置的车轮)。 车轮不是抽象自行车的关注点。那是要设置的具体课程。