抽象类可以取代接口吗?
2022-09-02 00:04:41
在 Java 中,可以创建仅包含抽象方法的抽象类。另一方面,您可以创建声明相同方法的接口。既然如此,你能使用抽象类而不是接口吗?
在 Java 中,可以创建仅包含抽象方法的抽象类。另一方面,您可以创建声明相同方法的接口。既然如此,你能使用抽象类而不是接口吗?
并非总是:
Sun 文档进行了更详细的比较:
抽象类与接口
与接口不同,抽象类可以包含非静态和最终的字段,并且可以包含实现的方法。此类抽象类类似于接口,不同之处在于它们提供部分实现,将其留给子类来完成实现。如果抽象类仅包含抽象方法声明,则应将其声明为接口。
多个接口可以由类层次结构中任何位置的类实现,无论它们是否以任何方式相互关联。例如,想想可比较或可克隆。
相比之下,抽象类最常被子类化以共享实现部分。单个抽象类由具有许多共同点(抽象类的实现部分)的类似类子类化,但也具有一些差异(抽象方法)。
在某些情况下,您可以使用抽象类而不是接口。但是,这样做几乎不是一个好主意。通常,您应该使用以下规则:
使用抽象类的另一个“问题”是,您无法再实现mixins,也就是说,您可以实现多个接口,但是您只能扩展一个抽象类。