真实世界的例子何时使用Abstract类以及何时使用Java 8引入的接口(默认和静态方法)

Real world examples when to use Abstract class and when to use Java 8 introduced interface(default and static methods)

本问题已经有最佳答案,请猛点这里访问。

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


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

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

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


如果在Java中需要多继承,则必须使用接口而不是抽象类。