实现接口必需实现其所有方法嘛?在jdk1.7以前是必需的,有了jdk1.8,这个概念可忘记了,接口可以有自己的默认实现了,接口能编写静态方法嘛?jdk1.7以前肯定是不行的,有了jdk1.8又是成了可以的了,幸福感的到来。
default 关键字
定义一个接口如下,有一个方法,增加一个关键字default
,你没看错,接口有方法体了,可以有自己的默认实现,default
集成了抽象接口的优点。
interface MyInterface{
default void api(){
}
}
实现类,可以选择是否重写接口
class MyInterfaceImpl implements MyInterface{
}
有何用处
使用spring-data-jpa
的同学都知道,spring这框架是面向接口编程的,不用写实现类,框架是根据接口的方法名称解析从而发b
出相应的sql
语句,如何接口的定义不满足我们的高级查询怎么办?因为我们要查好几张表,并还有相关逻辑要处理,这里接口就完成不了我们所以要功能了,可以实现spring-data-jpa
的接口呀,开玩笑吧,它定义了很多接口,难道你都要一个一个的去实现嘛?有了default
关键字,我们可以从接口上入手呀,大家现在应该可以想到怎么做了,就是我们也定义接口,复杂的查询或逻辑放default
方法体里实现就OK啦。
static 关键字
我们平时使用的static关键字就是去字义属性,类的方法等,有在接口上用过嘛?在1.7之前是完全不可能的。
根一般的静态方法定义是一样的
interface MyInterface{
default void api(){
}
static void myStaticMethod(){
//do something
}
}