# 接口的默认方法和静态方法
# 默认方法
在 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");。