面试的时候,竟然几次都被问到这个问题,虽然我也大概知道他们两个的区别,可是还是得全面总结一下。

不同点:

  • 抽象类使用 abstract 关键字修饰;接口使用 interface 修饰。
  • 抽象类中有构造方法(不写会有隐式构造方法),但不能实例化;接口没有构造方法。
  • 抽象类中可以有非抽象方法,接口中一般只有抽象方法。
  • 抽象类中可以有变量;接口中只能是常量
  • 抽象类只能单继承类;接口可以继承多个接口
  • 实现类只能继承一个抽象类;但可以实现多个接口

相同点:

  • 都可以被继承
  • 都不能被实例化
  • 都可以包含方法声明
  • 派生类必须实现未实现的方法

搬运地址:

每个程序员都必须搞懂的抽象类和接口的含义以及区别