default 关键字:是在 Java 8 中引入的新概念,也可称为 Virtual extension methods——虚拟扩展方法,它与public、private等都属于修饰符关键字,与其它两个关键字不同之处在于default关键字大部分都用于修饰接口。
default 修饰方法时只能在接口类中使用,在接口中被 default 标记的方法可以直接写方法体,而无需修改所有实现了此接口的类。
Interface概念
Interface(接口)的作用为的是扩展,或者归类。相比Abstract Class(抽象类)只能单个继承,Interface(接口)可以多实现,这是Interface(接口)的优势。
default关键字作用
-
在Java8里面接口里面有个default关键字,表示在接口里面声明的方法,可以有默认的实现,也可以不实现,这个场景常常在function的源代码里面看到,在实际项目中,往往接口里面定义多个方法,如果被几个类实现的话,后面想要在接口里面新增一个方法,就非常棘手,需要同时修改几个类的代码,这样对于开发者来说往往是不友好的。
-
使用 default 关键字可以打破这个限制,当定义了一个接口,但是我们接口中的方法用了 default 关键字,我们就可以在这个方法中进行实现了。
代码示例
我在TeacherInterface这个接口中,定义了两个方法,一个是execHello()的普通方法,另外一个是default关键字定义的默认方法,可以清楚地看到,它跟传统的方法不同,可以有自己默认的实现。
然后写一个为TeacherInterfaceImpl的实现类,实现TeacherInterface这个接口,从上面的代码中可以看到,被default修饰的方法可以不被接口的实现类所实现,可以完美的解决了在原有接口总添加新业务不带来影响。
单元测试1:我们知道在Java中,接口允许定义方法,但不提供这些方法的实现。当一个类实现一个接口时,它必须提供接口中所有方法的实现。这是Java的强制性要求。那么在Java8之后我们可以使用default关键字,这里使用接口中的默认实现,实现类不实现。
测试结果:实现类实现了accept这个方法。。。
测试结论:可见,我们没有实现的方法,接口替我们做了默认实现,这就是default的功劳。
单元测试2:我们知道在Java中,接口允许定义方法,但不提供这些方法的实现。当一个类实现一个接口时,它必须提供接口中所有方法的实现。这是Java的强制性要求。那么在Java8之后我们可以使用default关键字,这里不使用接口中的默认实现,实现类实现。
测试结果:实现类实现了accept这个方法。。。
测试结论:我们在实现类中实现accept()这个方法,最后也成功输出实现类中方法的结果,这就是Java的多态性!
标签:Java,关键字,default,接口,--,方法,实现 From: https://www.cnblogs.com/o-O-oO/p/18104631