JDK8前后的接口特性及接口与抽象类的对比

一.JDK8之前的接口特性
1.接口中的变量都是静态常量,必须显示初始化
2.接口中所有方法默认都是public abstract
3.接口没有构造方法,不可以被实例化,但可以被实现
4.实现类必须实现接口的所有方法
5.实现类可以实现多个接口
5.1implements,多个接口使用逗号隔开
二.JDK新增的接口特性
JDK1.8后,接口里可以有默认方法(方法体)了
1.default关键字-默认方法
2.默认方法可以被继承,通过实例调用
3.如果一个类实现了多个接口,多个接口都定义了多个同样的默认方法
解决方案一:实现类需要覆盖重写接口中的默认方法不然会报错
解决方案二:可以使用super来调用指定接口的默认方法
4.如果一个类继承了一个抽象类,实现了一个接口,抽象类和接口存在相同的方法,采取类优先的原则,优先继承抽象类的方法
5.接口中默认方法可以有多个
JDK1.8之后,接口里可以声明(并且可以提供实现)静态方法了
1.接口中的静态方法必须是public的,public修饰符可以省略,static修饰符不能省略
2.静态方法不能被继承及覆盖,所以只被具体所在的接口调用
3.接口中静态方法可以有多个。
三.JDK8之后加上默认方法的原因
为了解决接口与其实现类之间耦合度过高,修改接口,所有实现类必须随之修改的问题
四.JDK8之后加上静态方法的原因
帮我们实现静态工厂类,不用重新创建工具了。
五.接口与抽象类的异同
相同点
1.代表系统的抽象层
2.都不能被实例化
3.都能包含抽象方法
——用于描述系统提供的服务,不必提供具体实现
不同点
1.在抽象类中可以为部分普通方法提供默认实现,JDK8之前接口中只有包含抽象方法,JDK8之后接口中可包含默认方法
2.一个类智能集成一个直接的父类,但可以实现多个接口
六.抽象类和接口的使用原则
1.is a–抽象类;has a --接口
2.接口做系统与外界交互的窗口
接口提供服务
3.接口本身一旦制定,就不允许随意修改
4.抽象类可完成部分功能实现,还有部分功能可作为系统的扩展点
5.抽象类便于复用,接口便于功能扩展和维护。

发布了35 篇原创文章 · 获赞 3 · 访问量 543

猜你喜欢

转载自blog.csdn.net/biaogegegege1/article/details/105112170