我正在学习OOP的概念。在阅读继承的过程中,我了解到在初始化子类之前必须先初始化超类,即所有超类的构造函数必须在子类构造函数之前运行。此外,我们还可以直接创建超级类的实例。对于例如。
SuperClass superClass = new SuperClass();
现在,我遇到了抽象类。看来我们不能实例化一个抽象类。要使用抽象类,您必须从另一个类继承它,并为其中的抽象方法提供实现。
我的问题是,在实例化具体子类的同时,抽象超类的构造函数会在具体子类的构造函数之前被调用。如果是这样,为什么我不能直接实例化抽象超类呢?
抽象类就像一辆没有轮子的自行车。它有为车轮定义的空间,但自行车框架销售商将车轮的类型留给最终销售商。它只是指出车轮应该连接到车架的什么地方,以及应该使用哪些螺栓。自行车有一条链条,通向后轮应该去的地方,这样当小贩转动时,后轮就会被推进。
你可以试着骑那辆自行车,但没有轮子它动不了。当小贩转动时会出现错误,因为没有轮子可转动。
你需要具体的卖家来定义车轮将操作,只要他们是以预定义的方式附着。
因此,尝试骑自行车没有轮子就是尝试实例化抽象类。
即使你让它工作,它也是无用的,而且当你向前兜售时会因为没有轮子而抛出错误。
当你实例化方轮自行车,它将正常工作,并移动你前进时,你向前叫卖。
超类的实例化纯粹是为了连接链条,操纵杆可以移动,鞍座的高度可以设置,所有不包括车轮的标准功能都可以设置。轮子不是抽象自行车的关注点。这就是具体的类要设置的问题。
问题内容: 我创建了一个空的抽象类,并从中继承了该类: 我期望输出是 但是,我得到的是 如果我删除(这样就变成一个普通的类)和/或如果我设置了其他值,问题(显然)就消失了。 这里发生了什么? 问题答案: 这实际上不是ABC的问题,而是PyMongo的问题。有一个关于它的问题在这里。似乎pymongo重写以返回某种数据库类。这意味着将返回一个数据库对象,该对象在布尔上下文中为true。这使ABCMe
据我所知,Java抽象类不能实例化。然而,(抽象类)具有以下方法: 获取文档中提供了有关JAXP和Properties的更多详细信息。有谁能对此作更清楚的解释吗?。
我查过了,发现最接近的是这个,除了我没有任何向前的声明。我在基类中只有一个纯虚函数,我在子类中实现它,如下所示: 命令H 命令cpp 数字H 数字cpp 发生文件错误: 一个dd.cpp 添加H
我有两个方法和抽象类的接口,它们实现了这个接口并从它重写了一个方法。我可以实例这个抽象类,而不重写接口的其他方法吗?或者我可以用具有另一个签名的方法替换此方法吗? UPD:谢谢你的回答,我真的在我的问题上犯了错误。我是否可以使用匿名类来扩展我的抽象类,而不重写来自实现的所有方法?我如何理解DragonK的回答,不,我需要创建类,这将是扩展抽象类和重写其他方法?
问题内容: 我明白: 由于抽象类本身并不是什么,例如车辆,我们想要创建一个具体实现的对象,例如Car,Bike等。 对象链期间将调用抽象类的构造函数。 我们永远不能直接创建抽象类的对象,即使它包含构造函数并且所有方法都已实现。 但是从编译器的角度来看,Java为什么要强制执行这些规则? 问题答案: 这不是技术限制,而是(如您所指出的)逻辑上的限制。Java(和许多其他语言)执行各种规则不是因为它们
问题内容: 最近,我一直在使用XML解析器。这对我来说仅仅是个开始,我设法了解了如何在Java即使用DOM解析器类,以及如何解析XML文档。 我想问自己的是如何允许抽象类(例如和)实例化新实例?然后在另一个示例中,我看到: 据我所知,您不能为抽象类和接口类实例化(换句话说,创建一个对象)。我对么? 难道和方法创建上面的抽象类的实例? 我是否缺少使用抽象类及其新对象的内容? 问题答案: 该方法是一个