Java8新特性——接口的默认方法(或扩展方法)

Java 8 接口新特性:默认方法与静态方法实战 Java 8 引入了接口的默认方法(Default Methods),这是自 Java 面世以来对接口概念的重大扩展。默认方法允许开发者在接口中添加新方法的同时,不会破坏已有的实现类。本章将简要概述这一特性,并探究其背后的设计动机及对现有代码库可能产生的影响。在 Java 8 之前,接口仅能声明方法签名,而具体的实现则由实现该接口的类来完成。这导致一旦接口有更新,所有实现类都可能需要做相应的调整。这种设计模式在新的编程范式下显得不够灵活,比如在需要引入新方法以适应 lambda 表达式的场景下。 阅读详情

今天偶然看到了接口中的default方法,想起之前面试也聊过几次,便了解了一下。

官方文档通道:http://docs.oracle.com/javase/tutorial/java/IandI/defaultmethods.html

简单定义:Java 8 允许给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可,这个特征又叫做默认方法(扩展方法)

  • 默认:接口中已实现,实现类可直接使用
  • 扩展:实现类还可以重写

 注:默认方法不可以重写Object中的方法,可以重载Object中的方法。

光学不练假把式,接下来应用下试试。

业务场景:一个开发票的功能,由俩个公司来实现,现在要把开出的发票发送给用户,俩个公司的模式基本一样(获取发票号和用户手机,推送发票)

首先确认一下开票功能

public interface InvoiceCompany {
    //开发票
    void makeInvoice();
}


public class InvoiceCompanyA implements InvoiceCompany {

    @Override
    public void makeInvoice() {
        System.out.println("公司A开出了发票");
    }
}


public class InvoiceCompanyB implements InvoiceCompany {

    @Override
    public void makeInvoice() {
        System.out.println("B公司开出了一张发票");
    }
}

有兴趣的同学可以看下我的上一篇文章,介绍使用工厂模式来实现开发票,附地址

https://blog.youkuaiyun.com/Gavin_Java_/article/details/106805489

新特新参与:默认方法添加

public interface InvoiceCompany {
    //开发票
    void makeInvoice();
    //发送邮件
    default void sendEmail() {
        System.out.println("将发票发送给了用户");
    }
}

测试

public class DefaultTest {
    public static void main(String[] args) {
        InvoiceCompanyA invoiceCompanyA = new InvoiceCompanyA();
        invoiceCompanyA.makeInvoice();
        invoiceCompanyA.sendEmail();
    }
}


输出结果:公司A开出了发票
         将发票发送给了用户

总结:使用感觉还不错。如果按正常来写,只能是先写接口,俩个公司各做实现。由于发送模式相同,这样不可避免造成了代码的冗余。 新接口使得后续在添加新公司的时候更加便捷。如果发送方式不一样了,也可以重写发送接口,这个大家可以试一试。

思考:如果俩个接口是继承关系,他们又有同一个默认方法,那么他的实现调用时会发生什么呢?

我的写作思路很简单,工作中遇到问题->学习、思考->应用到工作。可能不是太深。所以非常希望大家能够留下自己的见解,一起探讨,一起进步。

Codesys电子凸轮Cam表实战:从可视化配置到程序化构建 本文详细介绍了Codesys电子凸轮Cam表的实战应用,从可视化配置到程序化构建的全过程。通过包装机和印刷机案例,解析Cam表的基础设置、调试技巧及动态构建方法,帮助工程师快速掌握电子凸轮技术,提升运动控制精度和效率。 阅读详情

相关推荐

【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)

在当今科技飞速发展的时代,人工智能(AI)已经成为各行各业不可或缺的一部分。特别是在文档处理和数据分析领域,AI的应用更是无处不在。今天,我要向大家介绍一个开源的AI框架引擎——RAGflow。它能够在深度文档理解方面执行检索增强生成(Retrieval-Augmented Generation,简称RAG),并且被认为是目前最优秀的RAG框架之一。本文将详细探讨RAGflow的创新功能、技术特点以及如何在实际应用中发挥其最大潜力。

Yooao的博客 9620

java 接口的默认方法

1.接口的默认方法,可以通过接口实现类对象,直接调用。 2.接口的默认方法,也可也被接口实现类进行覆盖重写 public class Demo02Interface { public static void main(String[] args) { //创建了实现类 MyInterfaceDefaultA a = new MyInterfaceDefaultA(); a.methodAbs();//调用抽象方法,实际运行的是右侧实现类

a1399028618的博客 4912

手把手教你编写PCIe设备驱动:基于Linux内核的实战教程

本文详细介绍了基于Linux内核的PCIe设备驱动开发全流程,包括环境准备、设备探测、中断处理、DMA配置等核心内容。通过实战代码示例和Makefile编写指南,帮助开发者快速掌握PCIe驱动开发技术,实现高性能设备驱动开发与优化。

weixin_30687051的博客 194

Java接口中的静态(static)方法和默认(default)方法

如何创建接口默认方法:在接口中的方法签名中使用default关键字。使用default修饰,不可省略,供子类调用或者子类重写可以继承,可以重写,二选一,但是只能通过实现类的对象来调用接口中,有多个默认方法时,实现类都可继承使用,如果继承方法有重名的,必须重写一次1、接口默认方法将帮助我们扩展接口,而不必担心破坏实现类。2、接口默认方法缩小了接口和抽象类之间的差异。3、接口默认方法使得我们无需创建基类,由实现类自己选择覆盖哪个默认方法实现。

m0_74352735的博客 3845

Linux环境下离线升级GCC-9.4.0的完整实践指南

本文详细介绍了在Linux环境下离线升级GCC-9.4.0的完整实践指南,包括准备工作、依赖库安装、编译配置及常见问题解决。特别适用于企业内网或安全要求严格的服务器环境,帮助开发者高效完成GCC离线升级,提升编译性能并支持现代编程语言特性。

weixin_29288313的博客 672

osgEarth添加线特征

部分关键代码: osgEarth::Annotation::FeatureNode* pathNode = 0; osgEarth::Symbology::Geometry* path = new osgEarth::Symbology::LineString(); Track*track = dynamic_cast<Track*>(entity->getProperty(PS_TRACK)); if (track == nullptr) { return; } st.

wb175208的专栏 2968

Java 8 新特性(二):接口的默认、静态方法

Java 8 新特性(二):接口的默认、静态方法 JAVA 8对接口进行了升级,原来的接口只能含有无方法体的方法定义,现在则引入了默认方法和静态方法的概念。 文章目录Java 8 新特性(二):接口的默认、静态方法概念引入原因默认方法静态方法方法定义规则方法调用默认方法1.一个类实现了一个接口的默认方法2.一个类实现两(多)个接口,且两(多)个接口有相同的默认方法3.一个类A实现一个接口C 同时继承接口C的实现类B4.一个类A实现一个接口C 同时未继承接口C的实现类B静态方法参考内容 概念 JAVA 8

董_不懂的博客 1898

【音视频处理】MP4、FLV、HLS适用范围,在线视频播放哪个更好

本期我们讨论在线点播的视频格式,对比这些视频格式的优劣以及原因 1、封装格式的作用 2、MP4 3、FLV 4、HLS

池鱼 - YiiGaa 2万+

Java接口中的default(默认方法)

Java接口中的default(默认方法)

m0_60742341的博客 1万+

四旋翼飞行器建模(一)

四旋翼飞行器的姿态运动学和姿态动力学建模方法。

加斯顿工程师的博客 687

OPTEE:TA命令操作的实现(三)

上文我们创建好了通道,现在就是操作,怎么操作TA呢?REE侧的CA执行创建会话操作成功后,CA就可使用获取到的调用来让TA执行特定的命令。通过ioctl的系统调用发送到OP-TEE的驱动中,保存在共享内存中,并触发安全监控模式调用(smc)切换到Monitor模式(ARMv7)或EL3(ARMv8)中进行安全世界状态的处理。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1268

Java接口(Interface)的默认(default)方法介绍

通常情况下,Java接口里的方法由实现类来实现,但有时候也可以在接口里提供默认实现类,所有实现类都可以直接使用这个默认方法,不用再操心去实现一些通用方法了。

shika1234的博客 5265

在claude code中使用glm模型出现Unable to connect to Anthropic services的解决方案

本文主要介绍了在claude code中使用glm模型出现Unable to connect to Anthropic services的解决方案,希望能对使用claude code的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 13万+

jdk8 接口新特性

jdk8 接口新特性 概述: jdk8之前接口是规则的集合体,方法只有抽象方法。 jdk8版本开始不光光有抽象方法同时增加了实体方法。 新加实体方法: 默认方法 静态方法 默认方法 概述: ​ 被关键字default修饰的方法就是默认方法,是在jdk8版本才出现的方法,独属于接口所有。 语法格式: ​ 修饰符 default 返回值类型 方法名 (参数列表){方法体} 使用规则: ​ 1、直接被实现类对象调用使用 ​ 2、可以被实现类重写后调用使用 ​ 3、实现类的其他方法中想要调用接口的默认方法: &n

A_Zeng_的博客 609

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

惊呆了!JDK1.8竟然打破了我对接口的一切认知...

简介 我们通常所说的接口的作用是用于定义一套标准、约束、规范等,接口中的方法只声明方法的签名,不提供相应的方法体,方法体由对应的实现类去实现。 在JDK1.8中打破了这样的认识,接口中的方法可以有方法体,但需要关键字static或者default来修饰,使用static来修饰的称之为静态方法,静态方法通过接口名来调用,使用default来修饰的称之为默认方法,默认方法通过实例对象来调用。 静态方法和默认方法的作用: 静态方法和默认方法都有自己的方法体,用于提供一套默认的实现,这样子类对于该方法就不需要强制来

weixin_49527334的博客 381

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

接口、JDK以及接口与类之间关系

接口 当一个类中的所有方法都是抽象方法时,可以将其定义为接口,接口也是一种引用数据类型,比抽象类还要抽象; (1)接口存在意义:规则的定义,程序的扩展性; (2)接口的定义和特点: 接口用关键字interface来定义:public interface 接口名{ } 接口不能实例化; (3)接口和类之间是实现关系,通过implements关键字表示; Public class类名 implements 接口名{} A . 接口的子类(实现类) 要么重写接口中的所有抽象方法,要么是抽象类;

qq_40808896的博客 210

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

抽象类与接口以及Java8中接口的默认方法

Java8中的默认方法和静态方法的由来,首先还是先重温一下抽象类和接口的区别:抽象类抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板。public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {    // abstract...

fanshukui的专栏 1万+

Java中接口的默认方法(Java 8新特性)

Java中接口的方法Java中接口的默认方法(Java 8新特性)1 Java中的修饰符2 接口中的默认方法3 用处4 带来的问题以及Java的解决方案 Java中接口的默认方法(Java 8新特性) 1 Java中的修饰符 ​ Java中的修饰符有public,private,protected和default四种,它们四种的区别如下表: 作用域 当前类 同一包内 子类 其他包 public √ √ √ √ private √ protected √ √ √ defa

梦中注定的博客 2890

【Day28】Java8 新特性汇总:接口默认方法、方法引用、重复注解

Java8 是 Java 发展史上的里程碑版本,除了我们前几节学的 Lambda、Stream、Optional,还包含接口默认方法、方法引用、重复注解等核心特性 —— 这些特性共同构成了 Java 函数式编程的基础,大幅提升了代码的简洁性和扩展性。今天我们系统梳理 Java8 的核心新特性,形成完整的知识体系,同时重点拆解接口默认方法、方法引用、重复注解三大高频考点。

maihuohuo的博客 1058

java8新特性之接口默认方法(扩展方法)

一、背景: java8新增加了特性,允许接口增加非抽象的方法实现,方法必须使用default声明,此方法可以在子类中直接使用,也可以在子类中重写,为什么要增加这一特性原因其实很简单,因为接口和实现类耦合度过高,使用java的同学肯定有感触,当要为接口增加一个方法时,所有实现类接口都要跟着改动,默认方法就是为解决这个问题而生,给接口增加方法而不破坏原有的接口实现。java8的大版本升级带来了很多功能上接口上的更新,为了向下兼容,所以增加的这一特性(bibi两句:这么解释其实有点打脸,piapia的,依然记得

houkun_dobest的博客 844

Java8——接口的默认方法和静态方法

开始我们也提到,interface 新增default和static修饰的方法,为了解决接口的修改与现有的实现不兼容的问题,并不是为了要替代abstract class。JVM平台的接口的默认方法实现是很高效的,并且方法调用的字节码指令支持默认方法。作为替代方式,接口可以提供一个默认的方法实现,所有这个接口的实现类都会通过继承得到这个方法(如果有需要也可以重写这个方法)默认方法允许我们在接口里添加新的方法,而不会破坏实现这个接口的已有类的兼容性,也就是说不会强迫实现接口的类实现默认方法。

持之以恒! 1814

Java 8 新特性:接口的静态方法和默认方法

Java 8 新特性:接口增强文 | 莫若吻      1.接口增强Java 8 对接口做了进一步的增强。a. 在接口中可以添加使用 default 关键字修饰的非抽象方法。即:默认方法(或扩展方法)b. 接口里可以声明静态方法,并且可以实现。2.默认方法(或扩展方法)Java 8 允许给接口添加一个非抽象的方法实现,只需要使用 default 关键字即可,这个特征又叫做扩展方法(也称为默认方法或...

Promise Sun special column 5万+

Javase 复习 接口 Java8引入默认方法 Java21新特性

接口通过关键字interface方法声明:接口中定义的方法默认是public和abstract的,方法没有方法体。常量:接口中可以定义常量,常量默认是的。接口是 Java 中用于定义抽象行为的工具,它定义了类需要实现的方法。接口提供了多继承的功能,一个类可以实现多个接口。Java 8 引入了默认方法和静态方法,使得接口变得更加灵活,允许接口中包含方法的实现。接口常用于解耦、实现多态和回调机制,是面向对象设计中不可或缺的一部分。sealed和non-sealed。

多多的博客 1055

Java 8 新特性—接口默认方法和静态方法

作者简介:大家好,我是哥,前中兴通讯、美团架构师,现某互联网公司联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬学习必须往深处挖,挖的越深,基础越扎实!

smart_an的专栏 1200

Java接口优化:JDK 8、JDK 17与JDK 21中接口默认方法与静态方法的区别是什么?

随着Java版本的演进,接口功能逐步增强。JDK 8引入了默认方法和静态方法,JDK 17和JDK 21继续优化接口特性,让接口的灵活性更强。在这篇文章中,猫头虎将带你深入了解: JDK 8接口中的默认方法与静态方法是什么? JDK 17和JDK 21中接口功能有哪些变化? 代码实战+详细解读,搞懂不同版本接口的区别! 全面掌握这些知识,让你写出更灵活、现代化的Java代码

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 2653

java 接口扩展方法_Java8新特性——接口的默认方法(扩展方法)

今天是高考的日子,是大四师兄师姐答辩毕业的日子。一代又来,一代又去。好久没写博客,借此特殊日子整理一下前不久学java8新特性时写的代码,留下痕迹。(本博客的代码根据本篇介绍java8的新特性之一:接口的默认方法(扩展方法)。1. 先定义一个接口IFormula,该接口含有一个默认方法sqrt和一个未实现的方法calculate:/**接口的默认方法Java8允许开发者通过使用关键字 defaul...

weixin_35990183的博客 2714
上一篇: 设计模式——工厂方法模式
下一篇: ArrayList源码解析(jdk1.8)——思路篇(如何看源码)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值