jdk8接口的升级
1.接口的局限性
接口要求实现类必须实现所有抽象方法,这一点非常苛刻,极大限制了接口的扩展性,比如:A类实现了某接口,日后接口升级,添加了一个新的方法,这个方法可能对于B实现类有用,但是A也必须强制实现,其他所有的实现类也都必须实现
如果该接口在项目大量使用,因后期系统变化需要升级接口,则所有的实现类无论方法有无作用,都需要强制实现,否则编译不通过
• JDK8新增接口中允许存在默认方法和静态方法,默认方法可以按需实现,不做强制,静态方法无法重写不可覆盖
• 这并不是说接口都写默认方法得了,在设计接口时,写任何代码时尽量遵守单一职责原则
• 所以JDK8提出函数式接口概念,即接口中只有一个抽象方法,确定接口职责,不要让接口显得臃肿
• 所有特性都需要合理使用
jdk8之前接口只能存在静态常量和抽象方法
接口的定义语法
JDK8之前接口只允许存在静态常量和抽象方法
interface 接口名{
静态变量;
抽象方法;
}
JDK8之后额外允许存在默认方法和静态方法
interface 接口名{
静态常量;
抽象方法;
默认方法;
静态方法;
}
默认方法和静态方法的区别
默认方法通过实例调用,静态方法通过接口名调用
• 默认方法可以被继承,实现类可以直接调用接口默认方法,也可以重写接口默认方法
• 静态方法不能被继承,实现类不能重写静态方法,也不可能通过实现类名调用,只能使用接口名调用
总结
接口中的默认方法可以不用实现也不会报错
默认方法也可以调用。如果默认实现不满足我们的需求,同样可以重写
无论在继承还是在实现关系下,静态方法均不可重写,静态是根据类的加载而加载,优先于对象存在,实现类必须创建对象才可使用,静态方法为了方便调用,重写没有意义