区别
- 从设计层面上看,抽象类提供了一种
IS-A
关系,是一种模板设计,即子类对象必须能够替换掉所有父类对象;而接口更像是一种LIKE-A
关系,它提供一种行为规范,并不要求接口和实现接口的类具有IS-A
关系。 - 从使用上来看,一个类可以实现多个接口,但是不能继承多个抽象类。(这里有一个题外话,接口是可以多继承的)
- 接口的字段只能是
static
和final
类型的,而抽象类的字段没有这种限制。 - 接口方法的默认修饰符是
public
,抽象方法可以有public
、protected
和default
(这里要注意抽象方法就是为了被重写所以不能使用private
关键字修饰,不会报错,但没有意义)。 - 接口的方法默认是
public
,所有方法在接口中不能有实现(Java 8
开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。
参考