Java接口和抽象类的区别
抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。
从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。
- 接口只能包含抽象方法(java8中引入了默认方法和静态方法),抽象类可以包含普通方法。
- 接口的字段默认都是static和final的,抽象类的字段可以是任意的。
- 接口不包含构造方法,抽象类里可以包含构造方法。
- 一个类可以实现多个接口,但最多只能继承一个抽象类
- 接口用interface声明,抽象类用abstract声明
接口和抽象类各有优缺点,在接口和抽象类的选择上,必须遵守这样一个原则:
- 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量少用抽象类。
- 选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用的功能。