# 接口的默认方法和静态方法

# 默认方法

在 JDK 8 中,default 关键字被赋予了更广的应用,还可以用在接口中,用来修饰非抽象的方法,称为『默认方法(default method)

public interface InterfaceA {
    default void testMethod(); // compile error! 会提示:Extension method should have a body.

    // 默认方法一
    default void print() {
        System.out.println("InterfaceA: an ordinary method.");
    }

    // 默认方法二
    default String getName() {
        return "InterfaceA";
    }
}
  • 首先,default 关键字用在接口中,用来修饰方法;

  • 其次,该方法不能使抽象方法,即必须是一个已经有了实现的方法,称为默认方法;

  • 最后,同一个接口内,可以有多个默认方法。

# 静态方法

在 Java 8 中,你可以为接口添加静态方法。从技术的角度来说,这是完全合法的。只是它看起来违反了接口作为一个抽象对象的理念。

public interface InterfaceA {

    ...

    static void sayHello(String name) {
        System.out.println("InterfaceA: hello " + name);
    }

}
  • 特性 1:静态方法不可被重写(即 @Override),会编译报错:Method does not override method from its superclass;

  • 特性 2:同一个实现类实现多个接口,允许这多个接口中声明同名的静态方法;

  • 特性 3:调用方式只有一种:接口名.静态方法,eg: InterfaceA.sayHello("susu");。