抽象类和接口有什么区别?

概念

  • 接口是对行为的抽象,是抽象方法的集合,利用接口可以实现定义与实现分离。
  • 抽象类是不能实例化的类,用abstract关键字修饰class,主要目的是实现代码重用

区别

  1. 接口所有属性都是隐含‘static final’修饰的常量,抽象类可以有变量和变量
  2. 接口所有方法都是隐含‘Public static final’修饰的抽象方法(JDK8之后可以是default),抽象类可以有抽象方法,也可以没有抽象方法
  3. 接口可以多实现,抽象类只能单继承
  4. 接口interface使用implements关键字实现,抽象类abstract class通过extends关键字实现

接口和抽象类如何选择?分别在什么情况下使用?

  1. 当仅仅只需要定义抽象方法而不需要公共变量和具体方法复用时选择接口
  2. 当需要公共的变量和具体代码复用时,选择抽象类

JDK8为什么在接口中出现default类型的方法?

使用接口,就可以实现面向接口编程,但是当接口内添加新方法时,就需要在所有的实现类中进行实现。为了给存在的接口新增方法而不影响已有的实现。所以引入了接口中的默认方法的实现。