默认方法

默认方法

  • 可以在接口中使用,以在不强制现有子类实现的情况下引入行为。
  • 可以由子类或子接口覆盖。
  • 不允许覆盖 java.lang.Object 类中的方法。
  • 如果一个实现多个接口的类,从每个接口继承具有相同方法签名的默认方法,那么它必须覆盖并提供它自己的接口,就像它们不是默认方法一样(作为解析多重继承的一部分)。
  • 尽管旨在在不破坏现有实现的情况下引入行为,但是现有的具有与新引入的默认方法具有相同方法签名的静态方法的子类仍将被破坏。但是,即使在超类中引入实例方法也是如此。

静态方法

  • 可以在接口中使用,主要用于默认方法的实用方法。
  • 不能被子类或子接口覆盖(对它们隐藏)。然而,即使是现在的静态方法也是如此,每个类或接口都可以拥有自己的类。
  • 不允许覆盖 java.lang.Object 类中的实例方法(目前也是子类的情况)。

下面是一个总结子类和超类之间交互的表。

- SUPER_CLASS-INSTANCE-METHOD SUPER_CLASS-STATIC-METHOD
SUB_CLASS-INSTANCE-METHOD 覆盖 生成 -编译时误差
SUB_CLASS-STATIC-METHOD 生成 -编译时误差 隐藏

下面是一个总结接口和实现类之间交互的表。

- INTERFACE-DEFAULT-METHOD INTERFACE-STATIC-METHOD
IMPL_CLASS-INSTANCE-METHOD 覆盖 隐藏
IMPL_CLASS-STATIC-METHOD 生成 -编译时误差 隐藏

参考文献: