Java 8 接口中的默认方法和静态方法2024 年 12 月 26 日 | 阅读 4 分钟 在 Java 编程语言中,接口是一种引用类型。接口与类相似。它只能包含常量、方法签名、默认方法、静态方法、嵌套类型和私有方法(Java 9 中引入)。 方法体只存在于默认方法和静态方法中(Java 9 中引入了私有方法)。请注意,接口不能实例化。它只能由类实现或由其他接口扩展。 Java 8 引入了各种新功能,包括 lambda 表达式、函数式接口、方法引用、流、Optional 以及接口中的静态和默认方法。 在本节中,我们将通过 Java 程序讨论如何在接口中使用静态和默认方法。 为什么要使用默认方法?在接口中引入默认方法的一个主要原因是增强 Java 8 中的 Collections API 以支持 lambda 表达式。如果层次结构中的任何类具有相同签名的类,则默认方法将变得无关紧要。默认方法不能覆盖 Java 中的方法。 默认方法Java 8 引入了默认方法来解决更改接口的问题。在默认方法之前添加到接口的新方法会导致实现该接口的所有类出错。由于默认方法,接口可以添加其他方法,而无需实现类提交实现。 默认方法使用 default 关键字在方法签名中声明。此关键字将默认方法与接口中的常规抽象方法区分开来。 语法 用例1. 向后兼容性 没有默认方法,向已经有多个实现的接口添加新方法可能会导致问题。通过使用默认方法,您可以扩展接口的功能,而不会影响已经实现的实现。 2. 菱形问题 如果一个类实现了两个具有冲突默认方法的接口,则实现类必须显式选择其中一个方法或提供其实现。 MethodImplementation.java 输出 Regular method implementation Default method implementation 解释 在此实例中,MyInterface 中存在默认方法 defaultMethod()。类 MyClass 提供了常规方法的具体实现,该类也实现了 MyInterface。如果类不为默认函数提供实现,则默认行为将向下传递给该类。 静态方法Java 8 除默认方法外,还在接口中添加了静态方法。这些方法可以在接口本身上调用,而无需接口实例;它们类似于类中的静态方法。将静态方法添加到接口的目的,是为了提供一种在接口内部组织类似实用方法的方法。与默认方法不同,静态方法不包含在接口的实现类 API 中,也不依赖于接口的实例。 语法 使用 static 关键字在接口中声明静态方法。该关键字表示方法与接口本身相关联,而不是与实现类的实例相关联。 避免使用工具类在 Java 8 之前,实用方法通常放在工具类中。有了接口中的静态方法,就不需要仅仅为了相关的静态方法而创建单独的工具类,从而实现了更内聚的代码组织。 用例1. 实用技术 具有静态方法的接口可用于聚合与接口概念相关的实用方法。这些技术提供了非实例特定的标准功能。 2. 无继承冲突 与实例方法不同,静态方法不参与多个继承冲突。因为静态方法是使用接口名称调用的,所以如果一个类实现了多个具有相同静态方法的接口,也不会发生冲突。 StaticMethod.java 输出 Result: 8 Square root: 5.0 解释 此示例显示了 MyMath 接口的常规方法 calculate(int a, int b) 和静态方法 squareRoot(int num)。无需首先创建静态方法的实例,就可以直接在接口上调用它。 上述程序可以写成如下 StaticMethod.java 输出 Result: 8 Square root: 5.0 结论总之,静态方法提供了一种整洁的方式来组合与接口相关的实用方法,从而消除了对独立工具类的需求。相比之下,默认方法允许接口在不影响现有代码的情况下进行演进。这两种特性都有助于使 Java 代码设计更具适应性和可重用性。 下一个主题Java 中约束和注解的区别 |
在编程中,安全和控制流是在开发应用程序时必须考虑的两个主要问题。有各种控制特性,例如 final 和 protected 关键字的使用,限制用户访问变量和方法。Java 15 引入了一个新的...
5 分钟阅读
当且仅当两个双缓冲区的元素类型相同,剩余元素数量相等,并且当考虑它们来自何处时,两个元素序列逐点等效时,它们才相等。……
阅读 4 分钟
多项式是代数中的基本元素,表示由变量和系数组成的表达式。多项式的导数是微积分中的一个关键概念,表示多项式值相对于其变量的变化率。计算导数在各个领域都至关重要,...
阅读 4 分钟
Java 提供了两种创建线程的方法:一种是实现 Runnable 接口,另一种是继承 Thread 类。然而,实现 Runnable 接口的一个重要缺失功能是,线程无法在…时返回某个值。
阅读 4 分钟
数据访问对象模式,通常称为 DAO 模式,用于将高层业务服务与低层数据访问 API 或操作分开。数据访问对象模式的成员列于下文。数据访问对象接口:数据访问对象接口指定了……
阅读 3 分钟
在 Java 中,将 String 转换为字符数组是一项常见任务。在 Java 中,我们主要将字符串转换为 char 数组进行字符处理、迭代和字符串操作。有以下方法可以将 String 转换为 char[] 数组:使用 Arrays.toCharArray() 方法使用 Stream 使用 String.split() 方法使用 Arrays.toCharArray()...
阅读 2 分钟
在 Java 中,读写 Excel 文件有点棘手,因为 Excel 工作表有单元格来存储数据。Java 不提供直接读取或写入 Microsoft Excel 或 Word 文档的 API。我们必须依赖第三方库,该库...
阅读 3 分钟
Java URLEncoder 是一个实用类,用于对 URL(统一资源定位符)进行编码。通过对 URL 进行编码可确保可靠性和安全性。当用户通过 get 方法请求特定站点时,表单参数及其值将添加到 '?' 符号之后...
阅读 3 分钟
在本节中,我们将学习什么是 sublime number,并创建 Java 程序来检查给定数字是否为 sublime number。Sublime number 程序经常出现在 Java 编码面试和学术界。Sublime Number 自然数 N 是...
阅读 2 分钟
什么是 xxwxx.dll 病毒? xxwxx.dll 是一种严重的 DLL 病毒,会损坏 Windows 系统文件和对象。此木马的主要目标是收集您计算机上的敏感和个人信息。个人文件和文档、图片、密码、登录信息,甚至信用卡...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India