相同点:

  • 都不能实例化
  • 都可以被实现或者继承
  • 继承或者实现的子类需要实现全部抽象方法,否则需要声明为抽象类

不同点:

不同点抽象类接口
声明abstractinterface
继承/实现extendsimplements
构造器可以有构造器不能有构造器
方法抽象方法和具体方法抽象方法和默认方法
方法修饰可以是任意修饰符默认public且只能是public
多继承子类只能继承一个抽象类子类可以实现多个接口
成员变量可以任意声明默认且只能声明为 static final

抽象类通常用来捕捉子类通用特性,是一种模板设计。
接口是对行为的抽象,或者说约定。

选择原则:

  • 行为模型应该用接口而不是抽象类来定义,所以通常优先选用接口,尽量少用抽象类
  • 当即需要定义子类行为,又要为子类提供通用功能时,可以选择抽象类

标签: Java, 知识点

添加新评论