在JDK8环境中,接口中的方法不再是只能有抽象方法,还可以有静态方法和default方法。实现类只需要实现它的抽象方法即可,JDK8中的接口有愈发向抽象类靠拢的感觉。
关于静态方法和默认方法作如下简述:
1、静态方法:public static 方法名 [throws异常列表]
在接口中直接由接口名调用,不需要由接口的实现类对象来调用。
2、default方法:public default void defaultMethod(){}【default不能省略】
由于Java中是单继承的,但接口可以同时实现多个。所以,若2个接口存在同名,同参数的默认方法,将无法识别到底调用的是哪个接口的方法,此时必须在实现类中显式重写default方法,而关于default的方法的重写,我们在实现类中不需要继续出现default关键字也不能出现default关键字。
注意:重写default方法的访问权限必须是public,子类重写接口默认方法时必须去掉default。因为default方法除了没有显式的访问修饰符外,只能用public访问限定符来修饰,而在Java中重写一个方法,访问限定符一定要大于父类或者接口指定的访问限定符范围,而且方法声明处抛出异常也要大于后者。所以访问权限必须是public。
@Override
public void defaultMethod(){}
/** * JDK8中接口新特性 */ public interface TestJDK8NewInterface { /** * 静态方法 */ static void staticMethod(){ System.out.println("staticMethod"); } /** * 默认方法 */ default void defaultMethod(){ System.out.println("defaultMethod"); } }