咱们一般所说的接口的做用是用于定义一套标准、约束、规范等,接口中的方法只声明方法的签名,不提供相应的方法体,方法体由对应的实现类去实现。ide
在JDK1.8中打破了这样的认识,接口中的方法能够有方法体,但须要关键字static或者default来修饰,使用static来修饰的称之为静态方法,静态方法经过接口名来调用,使用default来修饰的称之为默认方法,默认方法经过实例对象来调用。 测试
静态方法和默认方法都有本身的方法体,用于提供一套默认的实现,这样子类对于该方法就不须要强制来实现,能够选择使用默认的实现,也能够重写本身的实现。当为接口扩展方法时,只须要提供该方法的默认实现便可,至于对应的实现类能够重写也能够使用默认的实现,这样全部的实现类不会报语法错误:Xxx不是抽象的, 而且未覆盖Yxx中的抽象方法。spa
接口:3d
package com.swpu.newJDk; public interface DefaultInterface { public int k=10 ; void commonMethod(); default void defaultMethod(){ System.out.println("接口的默认方法"); } static void staticMethod(){ System.out.println("接口的静态方法"); } }
测试:code
package com.swpu.newJDk; /** * @ClassName Test * @Description TODO * @Author 王旭龙 * @Date 2019/9/9 14:53 */ public class Test { public static void main(String[] args) {
//匿名实现类 DefaultInterface defaultInterface = new DefaultInterface() { @Override public void commonMethod() { System.out.println("之前接口的普通方法,须要重写"); } }; defaultInterface.commonMethod(); defaultInterface.defaultMethod(); DefaultInterface.staticMethod(); System.out.println(DefaultInterface.k); } }
结果:对象
接口里static修饰的staticMethod 的调用时 接口名.方法 不能直接用示例对象调用。用default修饰的方法用实例对象调用,接口的成员变量是 public static final 修饰 直接blog