本篇文章小编给大家分享一下default修饰接口方法详解,文章介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
一、default修饰接口中的方法
在实现HandlerInterceptor接口时,发现不实现HandlerInterceptor接口的方法也不会报错
仔细想来,还是对接口的理解不清晰。
打开源码发现HandlerInterceptor接口中的方法都是default
在以前的接口编写中,总是省略权限修饰符,因为在接口中的方法中默认是pubpc abstract。
那么再来对接口进行总结。
那么也就是说,实现类要覆盖接口中的抽象方法就能实例化,而HandlerInterceptor接口中的方法都是default
在JDK8增加的default修饰接口方法时,有什么作用呢?
实现类会继承接口中的default方法
还有两个要注意的点
一言以蔽之,更接近实现类的优先级更高,如: 实现类 > 抽象类 > 接口
1. 如果一个类同时实现接口A和B,接口A和B中有相同的default方法,这时,该类必须重写接口中的default方法
2. 如果子类继承父类,父类中有b方法,该子类同时实现的接口中也有b方法(被default修饰),那么子类会继承父类的b方法而不是继承接口中的b方法
二、Java中的“多继承“?
在学习C++时,多继承会带来非常著名的菱形继承问题
那么为什么Java接口为何能多继承?
1.Java接口是行为性的,也就是说接口只是定义某个行为的名称2.具体的实现动作,都在实现类本身这里。
从JDK8开始,接口中可以写default方法了。这其实是java自己就给自己出了一个问题。
接口可以书写默认方法了,然后又因为接口之间是可以多继承的,因而实质上Java 8的接口多继承其实也会涉及到实现多继承的问题。
解决接口default方法冲突的三步骤:
方法签名相同时,才表示出现了冲突。
类中的方法优先级最高。类或者父类中的方法实现优先级大于任何接口的默认方法
其实,子接口的默认方法优先级更高。
若最终还是无法判断,那么实现类必须通过显示复写的方式复写默认方法,然后再自己通过xxx.super.xxx()的方式来指定具体使用哪个接口的实现
总之,Java8在语言层面上,对若出现接口default方法冲突的解决方案是:不作为。其实不作为也是一种作为,它让编译器去提示调用者必须显示的override这个冲突的方法,让coder自己去决定调用逻辑
三、关于抽象类与接口的思考
如果现在问我接口和抽象类有什么区别,我会觉得去说两者之间具体的使用细节是舍本逐末了,应该从设计理念出发。
于是引出我对此的理解。
抽象类:抽象体,对于个体(事物)的抽象。
接口:抽象面,对于事物某一特性(行为)的抽象。接口只是定义某个行为的名称。
在Java的设计中,经常可以看到两者组合起来使用。如Servlet
什么叫Servlet?实现了Servlet接口的类就是一个Servlet。
可以发现,抽象类GenericServlet实现了Servlet接口。
接口的好处是什么?
规范。
抽象类的好处是什么?
捕捉子类的通用特性,减少冗余代码,同时起到规范的作用。
这样两者结合起来的好处是什么(GenericServlet)?
规范,同时减少了编程人员的所需要编写的代码,抽象类给出模板。
忍者必须死34399账号登录版 最新版v1.0.138v2.0.72
下载勇者秘境oppo版 安卓版v1.0.5
下载忍者必须死3一加版 最新版v1.0.138v2.0.72
下载绝世仙王官方正版 最新安卓版v1.0.49
下载Goat Simulator 3手机版 安卓版v1.0.8.2
Goat Simulator 3手机版是一个非常有趣的模拟游
Goat Simulator 3国际服 安卓版v1.0.8.2
Goat Simulator 3国际版是一个非常有趣的山羊模
烟花燃放模拟器中文版 2025最新版v1.0
烟花燃放模拟器是款仿真的烟花绽放模拟器类型单机小游戏,全方位
我的世界动漫世界 手机版v友y整合
我的世界动漫世界模组整合包是一款加入了动漫元素的素材整合包,
我的世界贝爷生存整合包 最新版v隔壁老王
我的世界MITE贝爷生存整合包是一款根据原版MC制作的魔改整