Java 接口和抽象类的区别

抽象类(abstract class)

  • 抽象类和普通类一样可以拥有成员变量和普通方法。
  • 抽象类中的抽象方法必须是public(默认)或protected
  • private报错是因为无法被子类实现

接口(interface)

  • 行为的抽象
  • 接口中的变量会被隐式地指定为public static final变量
  • 接口中的方法会被隐式地指定为public abstract方法
  • 另外JDK8允许接口中有 默认方法 、静态方法 。JDK9允许接口中有 私有方法 。它们都可以有具体的实现。

区别

  • 抽象类可以提供成员方法的具体实现细节,而接口中只能存在public abstract方法。
  • 抽象类中的成员变量可以使各种类型,接口中只能被public static final修饰
  • 单继承多实现(一个类只能继承一个抽象类,可以实现多个接口)
  • 抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象
  • 抽象类比接口的最大优势是能够在后续添加方法,并保持向前兼容(提供一个具体实现方法或空实现)

猜你喜欢

转载自blog.csdn.net/yu540135101/article/details/113256176