接口与抽象类

PPG007 ... 2021-12-28 About 2 min

# 接口与抽象类

# 抽象类

在 Java 中被 abstract 关键字修饰的类称为抽象类,被 abstract 关键字修饰的方法称为抽象方法,抽象方法只有方法的声明,没有方法体。抽象类的特点:

  • 抽象类不能被实例化只能被继承。
  • 包含抽象方法的一定是抽象类,但是抽象类不一定含有抽象方法。
  • JDK 1.8以前,抽象类的方法默认访问权限为 protected。
  • JDK 1.8时,抽象类的方法默认访问权限变为 default。
  • 一个子类继承一个抽象类,则子类必须实现父类抽象方法,否则子类也必须定义为抽象类。
  • 抽象类可以包含属性、方法、构造方法,但是构造方法不能用于实例化,主要用途是被子类调用。

# 接口

Java 中接口使用 interface 关键字修饰,特点为:

  • 接口可以包含变量、方法;变量被隐式指定为 public static final,方法被隐式指定为 public abstract(JDK1.8 之前)。
  • 接口支持多继承,即一个接口可以 extends 多个接口,间接的解决了 Java 中类的单继承问题。
  • 一个类可以实现多个接口。
  • JDK1.8 中对接口增加了新的特性:
    • 默认方法(default method):JDK 1.8 允许给接口添加非抽象的方法实现,但必须使用 default 关键字修饰;定义了 default 的方法可以不被实现子类所实现,但只能被实现子类的对象调用;如果子类实现了多个接口,并且这些接口包含一样的默认方法,则子类必须重写默认方法。
    • 静态方法(static method):JDK 1.8 中允许使用 static 关键字修饰一个方法,并提供实现,称为接口静态方法。接口静态方法只能通过接口调用(接口名.静态方法名)。
    • JDK 1.8 以前,接口中的方法必须是 public 的。
    • JDK 1.8 时,接口中的方法可以是 public 的,也可以是 default 的。
    • JDK 1.9 时,接口中的方法可以是 private 的。

Tips

JDK1.9 允许接口中出现 private 修饰的默认方法和静态方法。

Last update: December 28, 2021 13:51
Contributors: PPG007