在Java中,您可以创建一个仅包含抽象方法的抽象类。另一方面,您可以创建一个声明相同方法的接口。在这种情况下,可以使用抽象类代替接口吗?
不总是:
Sun文档 进行了更详细的比较:
抽象类与接口 与接口不同,抽象类可以包含非静态和最终字段,并且可以包含已实现的方法。此类抽象类与接口相似,不同之处在于它们提供了部分实现,将其留给子类来完成实现。如果抽象类仅包含抽象方法声明,则应将其声明为接口。 可以通过类层次结构中任何位置的类来实现多个接口,无论它们是否以任何方式相互关联。例如,考虑可比或可克隆。 相比之下,抽象类通常被子类化以共享实现。单个抽象类由相似类的子类继承,这些相似类具有很多共同点(抽象类的实现部分),但也有一些区别(抽象方法)。
抽象类与接口
与接口不同,抽象类可以包含非静态和最终字段,并且可以包含已实现的方法。此类抽象类与接口相似,不同之处在于它们提供了部分实现,将其留给子类来完成实现。如果抽象类仅包含抽象方法声明,则应将其声明为接口。
可以通过类层次结构中任何位置的类来实现多个接口,无论它们是否以任何方式相互关联。例如,考虑可比或可克隆。
相比之下,抽象类通常被子类化以共享实现。单个抽象类由相似类的子类继承,这些相似类具有很多共同点(抽象类的实现部分),但也有一些区别(抽象方法)。