在jdk8以前的接口里面只能有抽象方法,不能有任何方法的实现,jdk8中引入了default关键字,接口中使用default修饰的方法,可以定义具体的方法实现。
代码如下:
package com.example.defaultdemo;public interface DefaultInterface {void interfaceMethod();default void interfaceMethodWithBody(){System.out.println("打印接口中default修饰的方法");}static void interfaceStaticMethodWithBody(){System.out.println("打印接口中static修饰的方法");}}package com.example.defaultdemo;public class DefaultImpl implements DefaultInterface{@Overridepublic void interfaceMethod() {System.out.println("打印实现类中实现接口中的抽象方法");}/*@Overridepublic void interfaceMethodWithBody(){System.out.println("打印实现类中重写接口default修饰的方法");}*/}package com.example.defaultdemo;public class DefaultMain {public static void main(String[] args) {DefaultImpl defaultImpl=new DefaultImpl();defaultImpl.interfaceMethod();defaultImpl.interfaceMethodWithBody();DefaultInterface.interfaceStaticMethodWithBody();}}
默认方法:接口里面定义一个默认方法,这个接口的实现类实现了这个接口之后,可以直接调用,也可以重写接口中的默认方法。
静态方法:通过接口名.静态方法来访问接口中的静态方法。
default可以用来设计模板模式,abstract抽象类也可以做到模板方法模式的功能,default的优势在哪里?
模板方法模式定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法模式可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
使用abstract抽象类来实现模板方法模式的缺点:当类的功能越来越多,变得复杂时,抽象类的管理和扩展就变得复杂了。jdk8新增了default,可以使用接口实现,抽象类只能单继承,而接口可以多实现,功能多时,可以定义多个接口,做到职责分离,大型结构中可以避免大量管理同一个抽象类中的默认方法。
最后修改时间:2020-07-01 13:37:35
文章转载自227decision,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




