由于Java 8允许在称为“ 默认方法”的接口中实现方法的默认实现,因此,我何时使用a似乎有些混乱abstract class
。
那么什么时候应该使用默认方法接口,什么时候应该使用抽象类呢?在这种情况下,抽象类仍然有用吗?
除了默认方法实现(例如私有状态)外,抽象类还有很多,但是从Java 8开始,无论选择哪种方法,都应该使用防御者(aka。)。 default
在接口中)方法。
对默认方法的约束是,只能在对其他接口方法的调用方面实现默认方法,而无需参考特定实现的状态。因此,主要用例是更高级别的便捷方法。
这项新功能的好处在于,在你不得不为便利方法使用抽象类,从而将实现者限制为单一继承之前,现在你可以拥有仅接口和最少实现量的真正干净的设计程序员的努力。
default
向Java 8中引入方法的最初动机是希望在不破坏任何现有实现的情况下,使用面向lambda的方法来扩展Collections Framework接口。尽管这与公共图书馆的作者更为相关,但是你可能会发现相同的功能在你的项目中也很有用。你可以在一个集中的地方添加新的便利,而不必依赖其他类型层次结构的外观。
我试图给出一个完整的答案: "为什么/何时使用抽象类而不是接口。" 并寻找以下方面的验证/建议。 对此的一个答案是, 在具体类来定义特定类型之前,抽象类通常位于继承层次结构中接口的正下方(就像Java API中的许多示例一样),实现并固定接口定义的结构的一些公共方面。 使用抽象类的另一个很好的理由是类型之间有一个清晰的逻辑层次结构。抽象类具有组织层次结构的作用,同时通过作为抽象类而不是具体类,迫使
主要内容:1 Java8 默认方法的介绍,2 Java8 默认方法的案例1 Java8 默认方法的介绍 Java提供了一种在接口内部创建默认方法的功能。在接口内部定义并带有默认标记的方法称为默认方法。这些方法是非抽象方法。 2 Java8 默认方法的案例 在下面的示例中,Sayable是一个功能接口,其中包含默认值和抽象方法。默认方法的概念用于定义具有默认实现的方法。您还可以覆盖默认方法,以为该方法提供更具体的实现。 输出结果为:
我想通过创建一个具体实现类的对象来执行接口中默认方法的定义体,该对象也覆盖了该方法。无论我是直接创建具体实现类的对象,还是通过动态绑定/多态,实现类中定义/重写的主体都只是得到执行。请看下面的代码 我想知道如何在控制台内部界面银行打印以下内容--loan()
我想给出一个完整的答案: “为什么/何时使用抽象类而不是接口。” 并寻求对以下方面的验证/建议。 “一个原因是:接口方法都是公共的,字段成员都是常量(final和public)。您可能需要限制方法的访问权限和/或使它们在非常量状态下操作。 另一个是:子代类可以通过super调用抽象类方法,而它不能对默认接口方法调用抽象类方法。此外,接口没有可由后代调用的构造函数。 其余的原因与上面的pre-Jav
我有一个类实现了多个具有相同默认方法的接口。我想知道如何从所有接口合成默认方法。例如: 复合模式也相当可观。但是我想用default方法作为mixin来给类不同的行为,而复合模式在这里没有给我静态类型检查。复合模式还引入了额外的内存占用。
我试图使用以下代码理解Java接口中的默认方法,但我无法编译它: 编译器生成了以下输出: 我无法理解这些错误。我如何更正代码中的问题?