Java 8默认方法与抽象类中的非抽象方法


问题内容

Java 8接口默认方法与抽象类中的非抽象方法-两者之间是否有任何区别(除了iface-类,可见性等不同)

默认方法不是Java的后退一步,是否违反Java多年来宣传的本质?


问题答案:

如果抽象子类的具体子类被super()覆盖,则抽象类中的非抽象方法将被调用。因此,存在多种可能性。如果不重写method,则将执行超类方法。如果我们在具体的子类方法中使用super(),则将执行被超类方法覆盖的方法。

Java 8接口的默认方法完全不同。它为开发人员提供了选择是否在实现类中实现该方法的选择。如果未实现该功能,则 会执行默认方法。

可能的用例:

最重要的使用情况在JDK库这一新功能是扩展现有的接口而不会破坏现有的实施者的可能性:增加一个新的抽象方法的接口将要求所有执行类来实现新的方法(来源