【Java】 Java 私有接口方法的使用

news2024/11/18 22:42:06

本文仅供学习参考!

相关教程地址:

https://www.baeldung.com/java-interface-private-methods

https://www.geeksforgeeks.org/private-methods-java-9-interfaces/

https://www.runoob.com/java/java9-private-interface-methods.html

private interface methods

接口是定义一组方法及其签名的契约。它可以由任何类及其在该类中实现的方法进行扩展。从 Java 9 开始,可以在接口中拥有私有方法

由于私有方法只能在定义它的接口内访问,因此您可以利用此类方法来编写您不希望被任何类或接口访问的敏感代码。

本文讨论了Java 中的私有接口方法以及如何实现它们。

Java 中的私有接口方法是什么?

在Java中,接口中的方法默认是**公共的。**这允许任何扩展此接口的类或接口调用此方法。Java 编程语言允许在接口中使用以下内容:

  • 常量变量
  • 抽象方法
  • 默认方法
  • 静态方法
  • 私有方法
  • 私有静态方法

私有接口方法是一种特殊类型的 Java 方法,只能在声明接口内部访问**。**这意味着扩展接口的类都不能使用该类的实例直接访问此方法。

接口方法默认是公共的。也就是说,它们可以由实现该接口的类以及同一包(或子包)中的任何其他类访问。但是,接口也可以将方法声明为私有。

私有接口方法允许您显式声明某个方法不打算被其他类、接口或对象使用。这在编写代码时非常有用,因为它可以让您保持代码库的组织性和可读性。

它还可以更轻松地确保方法的实现不依赖于其他类或对象的实现。私有接口方法对于降低复杂性和提高代码库的可读性非常有帮助。

这意味着您无法访问其定义接口之外的方法。私有接口方法甚至对其他接口也是不可见的 - 如果您希望其他类型(接口和类)可以访问接口方法,则必须将其设为public私有接口方法不能被子类继承,也不能在子类中重写。

私有接口方法有什么好处?

以下是使用私有接口方法的一些好处:

  • 代码可重用性——开发人员可以利用私有接口方法来重用声明接口内的代码;但是,您可能希望在接口的实现之间隐藏。
  • 封装——程序员可以利用私有接口方法来封装您不希望在接口实现之间共享的代码。

在 Java 接口中使用私有方法的规则

以下是开发人员在 Java 应用程序中使用私有方法时应遵循的规则和最佳实践

  • 私有接口中不允许使用抽象方法。私有接口方法只能在接口内部使用。
  • 不可能同时拥有privateAbstract修饰符。
  • 静态方法可以在静态非静态方法内部使用。
  • 不可能在私有静态方法中使用私有非静态方法。

如何在 Java 中编写私有接口方法

以下代码示例说明了如何在 Java 中创建私有接口方法:

interface TestInterface {
    public abstract void abstractMethodExample();

    public
    default void defaultMethodExample() {
        privateMethodExample();
        privateStaticMethodExample();
        System.out.println("在默认方法内部\n");
    }

    private void privateMethodExample() {
        System.out.println("在私有非静态方法内部\n");
    }

    private static void privateStaticMethodExample() {
        System.out.println("在私有静态方法内部\n");
    }
}

请参阅前面的代码清单中显示的名为TestInterface的接口。私有静态非静态方法是从名为defaultMethodExample的默认方法调用的。

名为TestClass 的类实现了该接口。请注意该类中如何实现抽象方法:

public class TestClass implements TestInterface {
    @Override
    public void abstractMethodExample() {
        System.out.println
        ("Inside the implementation of an abstract method");
    }
    public static void main(String[] args) {
        TestInterface test = new TestClass();
        test.defaultMethodExample();
        test.abstractMethodExample();
    }
}

当您执行该程序时,将显示以下文本消息:

在私有非静态方法内部
在私有静态方法内部
在默认方法内部
抽象方法的实现内部

Java 中的私有接口方法不能是抽象的

我们知道私有接口方法不能是抽象的。让我们通过一个例子来理解和验证这一点。更新我们之前示例中TestInterface的两个私有方法的源代码,如下所示:

private abstract void privateMethodExample() {
        System.out.println("在私有方法内部\n");
    }
private abstract static void privateStaticMethodExample() {
        System.out.println("在私有静态方法内部\n");
    }

请注意,我们仅在名为TestInterface的接口的两个私有方法的方法签名中添加了抽象关键字。以下是经过这些更改后名为TestInterface的接口的完整源代码:

interface TestInterface {
    public abstract void abstractMethodExample();
    public
    default void defaultMethodExample() {
        privateMethodExample();
        privateStaticMethodExample();
        System.out.println("在默认方法内部\n");
    }
    public static void staticMethodExample() {
        privateStaticMethodExample();
        System.out.println("静态方法内部\n");
    }
    private abstract void privateMethodExample() {
        System.out.println("在私有方法内部\n");
    }
    private abstract static void privateStaticMethodExample() {
        System.out.println("在私有静态方法内部");
    }
}

编译时,源代码将无法编译成功,并显示以下错误信息:

TestClass.java:17: illegal combination of modifiers: abstract and private

这证明你不能在方法签名中同时使用abstractprivate关键字。

END

私有接口方法是 Java 的一项功能,允许开发人员在接口中定义私有方法(静态非静态)。这对于定义只能从声明接口内部调用的辅助方法很有用。

除了提高接口内部代码的可重用性之外,私有接口方法还允许我们仅公开预期的方法实现。此类方法是定义它们的接口所独有的,不能从任何其他类或接口访问或继承。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java之路—— SpringMVC的常用注解解析以及作用、应用

创作不易,真的希望能给个免费的小 文章目录 1、Controller2、RequestMapping3.GetMapping、PostMapping、PutMapping、DeleteMapping4. RequestParam5.PathVariable6.RequestHeader7.CookieValue8.RequestBody9.ResponseBody10.SessionAttribute11.ControllerAdvice…

二层、三层交换机是什么?有什么区别?

作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 前言 本文将讲解二层交换机和三层交换机是什么,以及他们的区别。 目录 一、二层交换机是什么? 二、二层交换机的主…

本地生活多城市合伙人系统开发

本地生活多城市合伙人项目是一种基于本地生活服务的创业项目,旨在为各个城市的居民提供方便、实惠、高品质的生活服务。该项目通过招募多个城市的合伙人,建立完整的本地生活服务平台和供应链体系,覆盖不同类型的本地生活服务,如餐…

Nginx的Rewrite(地址重定向)

目录 前言 一、Rewrite 跳转场景 二、Rewrite 跳转实现 三、Rewrite实际场景 3.1Nginx跳转需求的实现方式 3.2rewrite放在 server{},if{},location{}段中 3.3对域名或参数字符串 四、Rewrite正则表达式 五、Rewrite语法格式 5.1rewrite语法格式…

互联网常见架构接口压测性能分析及调优手段建议

目录 互联网常见架构接口压测性能分析及调优手段建议 1 接口名称: 获取列表 1.1 压测现象:单台tps700多,应用cpu高负载 1.1.1 问题分析: 1.1.2 改进措施: 1.1.3 改进效果: 1.2 压测现象:数据库资源利用率高 1.2.1 问题分析: 1.2.2 改进措施: 1.2.3 改…

SciencePub学术 | 计算机科学类重点SCIEEI征稿中

SciencePub学术 刊源推荐:计算机科学类重点SCIE&EI征稿中!信息如下,录满为止: 一、期刊概况: 计算机科学类重点SCIE&EI 【期刊简介】IF:3.0-3.5,JCR 2区,中科院4区; 【检…

使用R绘制气泡图、带有显著性标记的热力图、渐变曲线图

大家好,我是带我去滑雪! 一幅精美的科研绘图会有诸多益处,精美的图像可以更好地传达研究结果和数据分析的重要信息。通过使用清晰、直观和易于理解的图像,可以更好地向读者展示研究的发现,有助于读者理解和解释数据。还…

JAVA开发(记一次504 gateway timeout错误排查过程)

一、问题与背景: 最近在发布一个web项目,在测试环境都是可以的,发布到生产环境通过IP访问也是可以的,但是通过域名访问就出现504 gateway timeout。通过postman去测试接口也是一样。ip和端口都可以通,域名却不行&…

如何在矩池云上运行 AI 图像编辑工具 DragGAN

5 月,DragGAN 横空出世,在开源代码尚未公布前,就在Github上斩获近 20000 Star,彼时,页面上只有效果图和一句“Code will be released in June”,然而这也足够带给人们无限期待。 在6月末,在若干…

SpringBoot最多可以处理多少个请求?

SpringBoot最多可以处理多少个请求? SpringBoot夺命连环14问,1天刷完别人半个月的springboot面试内容,比啃书效果好多了!_哔哩哔哩_bilibili 最小线程数:最少的厨师的量,饭店人不多的时候的量。 最大线程数…

微信可以自动跟圈的软件有吗?

对于许多人而言,每日发朋友圈已成为必要的任务之一,如同上学时老师检查作业般。但发圈何尝不像是写作业一样呢?有许多小号需发几十上百条朋友圈,令人感到枯燥、浪费时间。再加上我们还有其他事务要处理,例如服装店老板…

让你不再疑惑ai绘画生成器有哪些

有一天,设计师小李接到了一份任务,要在短时间内完成一幅复杂的插画。小李感到非常苦恼。于是,他开始寻找一种新的解决方案。通过搜索和咨询同事,小李发现通过使用ai绘画工具可以提高快速绘制图画的速度.那么,你知道最新…

paddlespeech 声纹识别embedding向量提取

参考: https://aistudio.baidu.com/aistudio/projectdetail/4353348 https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/demos/speaker_verification/README_cn.md 注意 1)安装paddlespeech,参考: https://blog.csdn.n…

儿童牙刷语音方案,低功耗语音芯片NV040C,支持UART指令

随着人们对生活品质的追求越来越高,家庭中的日常用品也开始注重便携性、功能性与智能化。牙刷作为家庭必备的清洁用品,同样也在走向智能化的方向。为此,市场上出现了一些支持语音指令的儿童牙刷语音方案,其中低功耗语音芯片NV040C…

TypeScript 中接口类型【Interfaces】的定义使用解读

导语: 什么是 类型接口? 在面向对象语言中,接口(Interfaces)是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类(classes)去实现(implement&#x…

从“裸辞”到“终于找到理想工作”,面试了37家公司,经过5个月的时间终于如愿以偿。

软件测试行业裸辞5个月,面试了37家公司,终于找到理想工作了... 在软件测试行业里工作已经有7年的时间了。然而,在今年初,我因为一些原因选择了离开原来的公司,成为了一名“裸辞族”。我并不后悔这个决定,因…

QT Creator上位机学习(一)基本类别及主体框架解析

系列文章目录 文章目录 系列文章目录前言基础认识多种项目3种基类文件管理编译 项目程序项目管理文件UI文件信号与槽主程序窗体头文件窗体源文件 前言 之前也学习制作过串口上位机和利用Qchart完成数据的曲线显示等等,但大多只是对网上的程序进行拼接,这…

15.RocketMQ中的负载均衡

1.3负载均衡 1.3.1什么是负载均衡 负载均衡(Load Balance)是一种技术解决方案。用来在多个资源(一般是服务器)中分配负载,达到最优化资源使用,避免单台服务器过载。 RocketMQ中的负载均衡主要可以分为生产者发送消息的负载均衡和消费者订阅消息的负载均衡…

记一次phpMyAdmin弱口令爆破事件应急响应

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 事件背景介绍02 流量分析过程03 事件分析结果04 安全加固建议 01 事件背景介绍 某内部应急演练中,安全部门在安全设备上观察到大量phpMyAdmin登录请求,现需根据流量情况进行…

leetcode887. 鸡蛋掉落(动态规划-java)

鸡蛋掉落 leetcode887. 鸡蛋掉落题目描述暴力递归 二分查找代码演示 动态规划代码演示 动态规划专题 leetcode887. 鸡蛋掉落 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/super-egg-drop 题目描述 给你 k 枚相同的鸡…