当前位置: 首页 > 知识库问答 >
问题:

真实世界的例子什么时候使用抽象类,什么时候使用Java 8引入的接口(默认和静态方法)[重复]

宋伟泽
2023-03-14

在Java8之前,我知道什么时候使用抽象类和接口,但是在Java8引入之后,可以在接口中提供默认和静态方法。接口和抽象类几乎是相似的,只是可以在抽象类中创建构造函数,而在接口中不能这样做。除此之外,我想知道在真实世界的例子中什么时候使用抽象类,什么时候使用Java8接口。

共有1个答案

施俊驰
2023-03-14

通过在interface中引入默认方法,Java8在某些情况下可以消除引入中间抽象/基类的需要,该中间抽象/基类实现任何子类的默认行为的接口。
有时,由于其他原因(遗留,需要包含字段等等),抽象/基类仍然是必需的但它的子类仍然可以从默认实现中获益,而不需要定义它。

因此在Java8之前在基类中定义的默认实现现在可以直接在接口中定义为默认方法。

collection接口中定义的stream()方法就是一个很好的示例。AbstractCollection及其作为ArrayList的子类不需要定义它。它直接从接口继承。

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

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

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 我想问一个问题,什么时候在Java中使用静态变量/方法或实例变量/方法更有利? 我知道这取决于特定的情况(比如将util类编程为静态方法),但是我们能声明一些像通用策略一样的东西吗?

  • 问题内容: 我想知道何时应该使用接口。 让我们考虑以下内容: 和: 我可以轻松实现它们,它们具有相同的功能…但是我也可以向车辆类中添加一些变量,这些变量可能应该在车辆中使用(maxSpeed,carType …) 使用接口的原因是什么? 谢谢! 编辑: 我在另一个线程中找到了关于它的漂亮链接:http : //www.thecoldsun.com/en/content/01-2009/abstra

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的