java8 接口的默认方法和静态方法_java 8在接口中加上静态方法表示相关的工厂或助手方法-程序员宅基地

技术标签: java  Java8 接口新特性 接口静态方法 接  

java8 接口的默认方法和静态方法

首先我们要总体说一下,为什么要有这两个方法存在:

(1)原先的jdk7之类的,它们接口中的方法都是抽象方法,没有具体的实现,就相当于定义好了这个接口有哪些功能,却没有具体定义功能是怎么实现的,通常由接口的实现类来做具体功能实现。那么,如果面向接口编程,大家已经根据自己需要通过继承接口的方式来实现了自己的功能,突然有一天,产品提需求了,你需要给所有接口的实现类都添加一个新的功能即一个新的方法实现,而且这个方法可能大家都是一样的,那咋办?

jdk8以前的做法肯定是现在接口中定义这个抽象方法,然后所有实现类必须实现这个方法(不然接口中多出一个抽象方法,其他类都没有实现,编译是会报错的),如果实现类比较多,那改起来会很麻烦,这种情况下是不利于维护的。

那么我们在jdk8中就有了好的解决方式,就是在接口中加一个默认方法,这个默认方法有具体实现,这样就不用去修改实现类啦,很省事。

//定义一个接口,实现加减乘除
interface Calculator {
default int addThree(int first, int second, int Third){
return first + second + Third;
}
int add(int first, int second);
int subtract(int first, int second);
int divide(int first, int second);
int multiply(int first, int second);
}

(2)除了上面一个用处以外,还有一个应用场景,接口中的静态方法可以帮我们实现静态工厂类,不需要你去额外写一个工厂类了,怎么实现呢?

原始的实现工厂类:

public class Main {
public static void main(String[] args) {
System.out.println(CalculatorFactory.getInstance().add(1, 2));
}
}
//定义一个接口,实现加减乘除
interface Calculator {
int add(int first, int second);
int subtract(int first, int second);
int divide(int first, int second);
int multiply(int first, int second);
}
class BasicCalculator implements Calculator {
@Override
public int add(int first, int second) {
return first + second;
}
@Override
public int subtract(int first, int second) {
return first - second;
}
@Override
public int divide(int first, int second) {
return first / second;
}
@Override
public int multiply(int first, int second) {
return first*second;
}
}


//加减乘除的工厂
class CalculatorFactory {
public static Calculator getInstance() {
return new BasicCalculator();
}
}


那现在有了接口中的静态方法怎么解决呢?就是在接口中加一个静态方法就可以实现了,是不是比写一个工厂类快,方便

public class Main {
public static void main(String[] args) {
System.out.println(Calculator.getInstance().add(1, 2));
}
}
//定义一个接口,实现加减乘除
interface Calculator {
static Calculator getInstance() {
return new BasicCalculator();
}

int add(int first, int second);
int subtract(int first, int second);
int divide(int first, int second);
int multiply(int first, int second);
}
class BasicCalculator implements Calculator {
@Override
public int add(int first, int second) {
return first + second;
}
@Override
public int subtract(int first, int second) {
return first - second;
}
@Override
public int divide(int first, int second) {
return first / second;
}
@Override
public int multiply(int first, int second) {
return first*second;
}
}


好好学习!天天向上!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013276277/article/details/78373232

智能推荐

【NumPy】深入解析numpy.power()函数-程序员宅基地

文章浏览阅读387次,点赞4次,收藏3次。函数作为NumPy库中的一个基础函数,为数组和矩阵的幂运算提供了高效且灵活的实现方式。当涉及大型数组或矩阵的幂运算时,使用Python内置的幂运算符可能无法满足性能和效率的要求。它利用底层硬件的并行计算能力,对输入数组中的每个元素进行幂运算,从而高效地处理大型数组或矩阵的幂运算。:在进行幂运算之前,请确保底数数组和指数数组的形状是匹配的,或者至少满足NumPy的广播机制。函数,它针对数组和矩阵的幂运算进行了优化,可以显著提高计算效率。函数,我们可以高效地处理大型数组或矩阵的幂运算,加速科学计算的进程。

2020最新互联网大厂职级和薪资对比,美团老人被新人严重倒挂!-程序员宅基地

文章浏览阅读2.3k次。点击上方“码农突围”,马上关注这里是码农充电第一站,回复“666”,获取一份专属大礼包真爱,请设置“星标”或点个“在看”本文转自:HR人力资源成长俱乐部互联网大厂新入职员工各职级薪资对应..._薪资倒挂表

java计算机毕业设计计算机实验课程学习系统源码+mysql数据库+系统+lw文档+部署-程序员宅基地

文章浏览阅读88次。java计算机毕业设计计算机实验课程学习系统源码+mysql数据库+系统+lw文档+部署。ssm基于uniapp+Vue框架的《露营》App开发与实现。ssm基于SSM高校教师个人主页网站的设计与实现。ssm基于Java的高校教学资源库的设计与实现。ssm基于javaweb的大学生宿舍管理系统。ssm基于H的新冠防疫宣传网站的设计与实现。ssm基于WEB的OA办公信息管理系统。

优惠券测试点-程序员宅基地

文章浏览阅读280次。优惠券测试点,实战分享_优惠券测试点

直播代码,实现H5强制刷新_h5如何保证每次曝光 就出发onpageshow-程序员宅基地

文章浏览阅读235次。直播代码,Android和iOS移动端实现H5强制刷新的相关代码定义和用法onpageshow 事件在用户浏览网页时触发。onpageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发, onpageshow 事件在每次加载页面时触发,即 onload 事件在页面从浏览器缓存中读取时不触发。为了查看页面是直接从服务器上载入还是从缓存中读取,你可以使用 PageTransitionEvent 对象的 persisted 属性来判断。 如果页面从浏览器的缓存中读取该属_h5如何保证每次曝光 就出发onpageshow

双向全桥LLC谐振变换器仿真及闭环控制研究:隔离型双向变换器的正向LLC、反向LC和CLLC拓扑分析-程序员宅基地

文章浏览阅读242次,点赞4次,收藏8次。在正向LLC拓扑中,谐振电容和谐振电感构成谐振环节,通过半桥电路实现直流侧的能量转换和控制。而在CLLC拓扑中,则是在正向LLC和反向LC拓扑的基础上,增加了串联电感,进一步改善了系统的性能。在双向全桥LLC谐振变换器中,通过合理的设计和控制,可以实现输入端与输出端之间的电气隔离,有效地保护负载设备,提高系统的安全性和稳定性。综上所述,双向全桥LLC谐振变换器作为一种重要的电力电子设备,具有隔离型特点、多种拓扑结构、变频控制和闭环控制等优势。通过仿真模型的验证和优化,可以进一步提高系统的性能和可靠性。

随便推点

IDEA+Java+JSP+Mysql+Tomcat实现Web图书管理系统(1)-程序员宅基地

文章浏览阅读465次,点赞14次,收藏8次。由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!点击【学习资料】即可免费领取!@return*//**根据图书编号进行查询@param id@return*/由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!点击【学习资料】即可免费领取![外链图片转存中…(img-VIfqtGQZ-1713494366397)]

windows安全加固_windows安全加固脚本-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏10次。目的:通过审核策略,记录登录系统登录事件,对象访问事件,软件安装事件,安全事件等。目的:根据系统要求,设定不同账户和组,管理员、数据库sa、审计用户、来宾用户等。目的:删除或锁定与设备运行,维护等工作无关的账号,提高系统账号安全性。**“审核特权使用” 设置为”**成功“和”失败“都要审核。**”审核策略更改“**设置为”成功“和”失败“都要审核。目的:减少账户被爆破的可能性,提高系统访问安全性。目的:关闭不必要的服务,提高系统性能和安全性。目的:防止弱口令出现,降低被爆破的可能性。_windows安全加固脚本

ARM9异常种类及优先级。-程序员宅基地

文章浏览阅读3.1k次。ARM9异常种类及优先级。_arm9

【从入门到起飞】JavaSE—网络编程三要素,软件架构,UDP协议-程序员宅基地

文章浏览阅读2.7k次,点赞76次,收藏73次。详细讲解网络编程三要素,软件架构,UDP协议

Redis简述|以及它能用于做什么?_redis一般用来干嘛-程序员宅基地

文章浏览阅读2.5w次,点赞19次,收藏145次。Redis是一种开源的NoSQL内存数据库,用于高性能的数据存储和访问。Redis支持多种数据类型,包括字符串、哈希、列表、集合和有序集合,并且支持分布式存储和操作。Redis的特点包括快速、高可用和易扩展等,适用于各种应用场景。Redis作为一款高性能的NoSQL数据库,具有快速、高可用和易扩展等优点,广泛应用于互联网、电商、游戏和金融等领域。在使用Redis时,需要考虑数据的特性和访问模式,选择合适的数据类型和持久化机制,同时进行性能优化和容错处理,保证系统的高可用和稳定性。_redis一般用来干嘛

保姆级教程-如何使用LLAMA2 大模型_如何调用 llama 的 api-程序员宅基地

文章浏览阅读1.2k次。保姆级教程-如何使用LLAMA2 大模型,教你如何一步步配置llama模型,并且调用它!_如何调用 llama 的 api

推荐文章

热门文章

相关标签