2.7 何时使用Java 8中的接口默认方法,何时使用抽象方法? | Java Debug 笔记

112 阅读1分钟

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

提问:何时使用Java 8中的接口默认方法,何时使用抽象方法?

Java 8允许在接口中包含方法的默认实现,被称为默认方法。

我什么时候应该使用那种接口的默认方法而不是抽象类的抽象方法,我为此感到困惑。

那么,什么时候应该使用接口的默认方法,什么时候应该使用抽象类的抽象方法?在Java 8推出了默认方法以后,抽象方法还有必要吗?

评论区一号:

或许您至今仍然不知道接口不能包含属性,私有方法,但是抽象类却可以(笑死)

回答1:

抽象类除了抽象方法,相对于接口,还是有很多额外的功能(例如私有方法)。

这项新功能的好处在于,在您不得不为工厂方法使用抽象类,从而将实现者限制为单一继承之前(Java没办法多继承),现在您可以用仅接口和最少实现量的干净的设计,并将注意力放在程序本身上。

Java 8中引入默认方法的最初动机是希望在不破坏任何现有实现的情况下,使用lambda方法来扩展Collections Framework接口。当然,这主要是对开发公共Jar包的开发者用处大,但您可能会发现这个特性也方便了你自己。你可以让一个类同时实现多个接口的默认方法。