当前位置: 首页 > 面试题库 >

什么时候必须使用接口而不是抽象类?

巫懿轩
2023-03-14
问题内容

我想知道何时应该使用接口。

让我们考虑以下内容:

public abstract class Vehicle {
   abstract float getSpeed();
}

和:

public interface IVehicle {
  float getSpeed();
}

我可以轻松实现它们,它们具有相同的功能…但是我也可以向车辆类中添加一些变量,这些变量可能应该在车辆中使用(maxSpeed,carType …)

使用接口的原因是什么?

谢谢!

编辑:
我在另一个线程中找到了关于它的漂亮链接:http : //www.thecoldsun.com/en/content/01-2009/abstract-
classes-and-interfaces


问题答案:

从Java How toProgram关于抽象类:

由于它们仅在继承层次结构中用作超类,因此我们将它们称为抽象超类。 这些类不能用于实例化对象,因为抽象类是不完整的。
子类必须声明“缺失的部分”以成为“具体的”类,您可以从中实例化对象。否则,这些子类也将是抽象的。

要回答您的问题“使用接口的原因是什么?”:

一个 抽象类的目的 是提供一种适当的超类其他类可以继承并且因此共享共同的设计。

与接口相反:

一个 接口描述 了一组可以在对象上调用的方法,但 所有这些方法并没有提供具体的实现
......一旦一个类实现一个接口,该类的所有对象有一个是,一个接口类型的关系,并且 保证该类的所有对象都提供接口描述的功能。
该类的所有子类也是如此。

因此,要回答您的问题“我想知道何时应该使用接口”,我认为您应该在需要完整实现时使用接口,而在需要部分设计时使用抽象类(以实现可重用性)



 类似资料:
  • 问题内容: 为什么要创建抽象或接口类,或者何时应使用抽象或接口类? 问题答案: 仅在声明类必须具有的方法和成员时,才使用接口。实现该接口的任何人都必须声明和实现该接口列出的方法。 如果你还想拥有默认实现,请使用抽象类。扩展抽象类的任何类都必须仅实现其抽象方法和成员,并且将具有抽象类其他方法的一些默认实现,你可以覆盖或不重写。 -编辑-忘了提,Earwicker提醒我 最后,你可以根据需要实现任意数

  • 如果有人能给出我在Java15中需要在接口类和抽象类之间做出选择的1-2个场景示例,我将非常感激。此外,如果它能在现实生活中的项目,而不是动物或形状类的例子,将是伟大的。 谢谢!!

  • 问题内容: 我知道我可以使用serialVersionUID来控制类的版本。我读到我可以添加或删除字段,并且该类仍将兼容,它将仅使用默认值。 什么时候 必须 更改serialVersionUID? 问题答案: 当对类的结构进行不兼容的更改时,最好更改serialVersionUID字段的值。Java对象序列化规范中列出了不兼容更改的完整列表。 为了进一步扩展,对类的不兼容更改将阻止反序列化机制创建

  • 对许多人来说,这可能是一个简单的问题,但让我困惑。我从凯西·塞拉那里挑选了一个例子,展示了抽象类的实用性,但我无法理解抽象类的整体重要性。 例如,我们有一个带有抽象方法的抽象类, 我的问题是——为什么我们首先需要抽象类来为每种汽车类型定制方法?为什么不在这些汽车子类型中的任何一个中使用这两种方法,比如宝马和其他两个——大众和奥迪——可以简单地覆盖这些方法?

  • 如果我用MockBean替换Autowired的话,它是有效的,但我不知道为什么

  • 问题内容: 我是一名C ++程序员,偶尔使用MySQL处理数据库,但是我的SQL知识非常有限。但是,我当然愿意改变这一点。 目前,我正尝试仅通过SQL查询对数据库中的数据进行分析(!)。但是我将放弃,而是将数据导入C 并使用C 代码进行分析。 我已经与同事讨论了这一点,他们也促使我使用C ++,他说SQL并不是用于复杂的分析,而是主要用于导入(从现有表中)和导出(到新表中)数据,还有更多内容。例如