相同点:
- 都不能实例化
- 都可以被实现或者继承
- 继承或者实现的子类需要实现全部抽象方法,否则需要声明为抽象类
不同点:
不同点 | 抽象类 | 接口 |
---|---|---|
声明 | abstract |
interface |
继承/实现 | extends |
implements |
构造器 | 可以有构造器 | 不能有构造器 |
方法 | 抽象方法和具体方法 | 抽象方法和默认方法 |
方法修饰 | 可以是任意修饰符 | 默认public 且只能是public |
多继承 | 子类只能继承一个抽象类 | 子类可以实现多个接口 |
成员变量 | 可以任意声明 | 默认且只能声明为 static final |
抽象类通常用来捕捉子类通用特性,是一种模板设计。
接口是对行为的抽象,或者说约定。
选择原则:
- 行为模型应该用接口而不是抽象类来定义,所以通常优先选用接口,尽量少用抽象类
- 当即需要定义子类行为,又要为子类提供通用功能时,可以选择抽象类