Java接口和抽象类的区别

在面试中我们经常会遇到这样的问题:接口和抽象类之间的区别,两者在开发过程中该如何选择,下面总结一下关于接口和抽象类的这两个问题。

接口和抽象类的区别

  • 修饰的关键字,接口是interface,抽象类是abstract,两者均不能被实例化。
  • 继承关系,接口和派生类之间是LIKE-A关系,抽象类和派生类之间是IS-A的关系。
  • 抽象类可以有构造函数,接口不可以有构造函数。
  • 一个类可以实现多个接口,一个类只能继承一个抽象类。
  • 抽象类中可以有普通的成员变量,接口中的成员变量只能是public static final修饰的。
  • 抽象类中可以使用多种访问控制权限修饰符,接口中只能使用public访问控制权限修饰符。
  • 抽象类中可以有非抽象的方法,接口中所有的方法只能是抽象的。
  • 抽象类中可以有main方法,接口中不能有main方法。
  • 当接口中只有一个抽象函数的时候,该接口是函数式接口可以用lambda表达式实现,抽象类则不行。

使用场景

使用场景总的说是根据接口和抽象类各自的特点以及使用的动机来选择的。接口更像是定义一组规则,后续可以有多种不同的实现,增加了代码的灵活性,抽象类中可以定义非抽象的方法,那么可以把一些共用的方法实现在抽象类中,这样增加了代码的复用性。

使用抽象类

  • 当需要在类中定义非静态或者非final类型的变量时候,可以考虑使用抽象类。
  • 当需要在类中定义一些有具体方法体的方法的时候,可以考虑使用抽象类。
  • 当需要实现一个类,类中的方法全是静态的方法,不需要被实例化的时候,可以考虑使用抽象类。

使用接口

  • 当一个类需要实现多个类的时候,可以考虑使用接口。在JAVA中不支持多继承,但是支持多实现,即实现多个接口。
  • 当具体应用中方法的定义和具体的实现是完全分开的,可以考虑使用接口。
posted @ 2020-07-05 21:14  un1que~  阅读(186)  评论(0编辑  收藏  举报