行业网站解决方案,智能建站,沈阳网页设计收费标准,高端定制网站公司哪家好在新的Java 8日期和时间API#xff1a;Stephen Colebourne的访谈中 #xff0c; Stephen Colebourne告诉Hartmut Schlosser #xff1a;“我认为最重要的语言更改不是lambda#xff0c;而是接口上的静态方法和默认方法。” Colebourne补充说#xff1a;“添加默认方法消除… 在新的Java 8日期和时间APIStephen Colebourne的访谈中 Stephen Colebourne告诉Hartmut Schlosser “我认为最重要的语言更改不是lambda而是接口上的静态方法和默认方法。” Colebourne补充说“添加默认方法消除了使用抽象类的许多原因。” 在阅读本文时我意识到Colebourne是正确的并且我当前使用抽象类的许多情况都可以用具有JDK 8默认方法的接口替换。 这在Java世界中非常重要因为抽象类和接口之间的差异一直是困扰新Java开发人员试图理解差异的问题之一。 在许多方面在JDK 8中区分两者甚至更加困难。 在线论坛和博客中有许多示例讨论了Java接口和抽象类之间的区别。 这些包括但不限于JavaWorld的Abstract类和interfaces StackOverflow的何时必须使用接口代替抽象类 接口与抽象类之间的区别 Java中的10个抽象类和接口面试问题 曾经有用且有用的答案现在它们中的许多已经过时了对于那些刚开始使用Java的Java初学者来说这可能会更加困惑JDK 8的Java经验。 当我在思考JDK 8世界中Java接口和抽象类之间的其余差异时我决定看看Java教程对此要说些什么。 本教程已更新为反映JDK 8并且抽象方法和类具有称为“与接口相比的抽象类”的部分该部分已进行了更新以合并JDK8。本节指出了JDK 8接口与抽象类的异同。 。 它强调的区别是数据成员和方法的可访问性抽象类允许非静态和非最终字段并允许方法是公共的私有的或受保护的而接口的字段本质上是公共的静态的和最终的以及所有接口方法本质上是公共的。 Java教程继续列出了何时应该考虑抽象类以及何时应该考虑接口的项目符号。 毫不奇怪它们源自前面提到的差异并且主要与是否需要将字段和方法设置为私有受保护非静态或最终喜欢抽象类或是否需要专注于键入的能力有关无需考虑实现偏好接口。 因为Java允许一个类实现多个接口但仅扩展一个类所以当特定实现需要与多种类型关联时可以认为该接口是有利的。 由于JDK 8的默认方法这些接口甚至可以为实现提供默认行为。 一个自然的问题可能是“ Java如何处理实现两个接口的类这两个接口都描述具有相同签名的默认方法” 答案是这是编译错误。 这在下一个屏幕快照中显示该快照显示NetBeans 8在我的类实现两个接口时均报告该错误每个接口定义了具有相同签名[ String speak() ]的默认方法。 如上面的屏幕快照所示显示了一个编译器错误指出“类...从类型…和…继承…的不相关默认值”其中类名默认方法名和两个接口名是消息中指定的名称 。 Peter Verhas撰写了一篇详细的文章“ Java 8默认方法可以做什么和不能做什么 ”探讨了与带有相同方法的具有默认方法名称的多重实现接口相关的一些极端情况陷阱。 结论 可以说JDK 8带来了抽象类相对于接口的最大优势。 这样做的含义是当今使用的大量抽象类很可能会被具有默认方法的接口所取代而许多将来将成为抽象类的未来构造现在将成为具有默认方法的接口。 翻译自: https://www.javacodegeeks.com/2014/04/abstract-class-versus-interface-in-the-jdk-8-era.html