【Java笔记】第10章:接口

  • 前言
  • 1. 接口的概念与定义
  • 2. 接口的声明与语法
  • 3. 接口的实现
  • 4. 接口的继承
  • 5. 接口的默认方法
  • 6. 接口的静态方法
  • 7. 接口的私有方法
  • 8. 接口的作用
  • 9. 接口与抽象类的区别
  • 10. 接口在Java集合中的应用
  • 结语

在这里插入图片描述
在这里插入图片描述

上期回顾:【Java笔记】第9章:三个修饰符
个人主页:C_GUIQU
归属专栏:【Java学习】

在这里插入图片描述

前言

各位小伙伴大家好!上期小编给大家讲解了Java中的三个修饰符,接下来讲讲Java中的接口!

1. 接口的概念与定义

Java接口(Interface)是一种引用类型,类似于类,用于存放抽象方法和静态常量。接口定义了一个规范,规定了实现接口的类应具备哪些方法。接口不能被实例化,但可以被实现(implements)或继承(extends)。

2. 接口的声明与语法

接口的声明以关键字interface开始,后面跟着接口的名称。接口中可以定义抽象方法和静态常量。

接口的语法如下:

public interface InterfaceName {// 静态常量int SOME_CONSTANT = 10;// 抽象方法void abstractMethod();
}

3. 接口的实现

一个类通过implements关键字来实现接口。实现接口的类必须实现接口中所有的抽象方法,否则该类必须声明为抽象类。一个类可以实现多个接口。

public class MyClass implements InterfaceName {// 实现接口中的抽象方法public void abstractMethod() {System.out.println("实现接口的抽象方法");}
}

4. 接口的继承

接口可以通过extends关键字继承另一个接口。一个接口可以继承多个接口,相当于扩展了接口的方法和常量。

public interface NewInterface extends InterfaceName {// 新的抽象方法void newAbstractMethod();
}

5. 接口的默认方法

Java 8引入了默认方法(default method),允许接口提供方法的实现。默认方法是非抽象的,可以有方法体。实现类可以选择性地覆盖默认方法。

public interface InterfaceName {// 默认方法default void defaultMethod() {System.out.println("这是默认方法");}
}

6. 接口的静态方法

Java 8也允许接口定义静态方法(static method)。静态方法不能被实现类覆盖,只能通过接口名调用。

public interface InterfaceName {// 静态方法static void staticMethod() {System.out.println("这是静态方法");}
}

7. 接口的私有方法

Java 9引入了私有方法(private method),允许接口内部定义私有方法。私有方法可以是静态的或非静态的,用于辅助实现接口的默认方法。

public interface InterfaceName {// 私有方法private void privateMethod() {System.out.println("这是私有方法");}// 调用私有方法的默认方法default void defaultMethod() {privateMethod();}
}

8. 接口的作用

接口在Java中主要用于实现多态、解耦和定义规范。通过接口,可以隐藏实现类的具体细节,只暴露必要的操作,提高代码的可维护性和扩展性。

9. 接口与抽象类的区别

  • 接口只能定义抽象方法和静态常量,而抽象类可以定义抽象方法和具体方法,可以有构造器,可以有成员变量。
  • 一个类可以实现多个接口,但只能继承一个抽象类。
  • 接口主要用于定义公共的方法规范,抽象类主要用于共享代码和实现。

10. 接口在Java集合中的应用

Java集合框架(Collection Framework)广泛使用接口。例如,ListSetMap都是接口,它们定义了集合操作的规范。具体的集合类如ArrayListHashSetHashMap实现了这些接口,提供了不同的集合操作实现。

结语

接口是Java语言中一个重要的概念,它提供了一种定义规范和实现多态的机制。通过接口,可以隐藏实现细节,提高代码的灵活性和可维护性。随着Java语言的发展,接口的功能也在不断增强,如默认方法、静态方法和私有方法的引入,使得接口更加灵活和强大。
至此,Java的接口讲解完毕。
感谢您的观看!互三必回!持续更新中~!

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

contenteditable实现插入标签的输入框功能(Vue3版)

需求:实现一个简易的函数编辑器 点击参数能够往输入框插入标签点击函数能够往输入框插入文本删除能够把标签整体删除输入的参数能够获取到其携带的信息 插入文本 /*** description 点击函数展示到输入框*/ const getValue ({ item, type }: any) > {// 创建…

Apache Doris 基础 -- 数据表设计(使用AUTO_INCREMENT)

导入数据时,Doris将表唯一值分配给自动递增列中没有指定值的行。 1、功能 对于包含自动递增列的表,在数据导入期间: 如果目标列不包括自动递增列,Doris将用生成的值填充自动递增列。如果目标列包括自动递增列,则为该列导入的数…

【echarts】如何制作,横坐标每个日期点如何对应一条竖线的图,以及 markline设置后不生效问题

图的样式如下: 在线演示 每一个日期,对应一条竖线展示。 echarts配置内容: 在线演示 option {xAxis: {type: category,data: [20240601, 20240602, 20240603, 20240604, 20240605, 20240606, 20240607] // X轴数据},yAxis: {type: valu…

HTML label 标签的作用和应用场景

label 标签 作用和语法 label 标签来定义表单控制间的关系&#xff0c;当用户点击该标签时&#xff0c;浏览器会自动将焦点转到和标签相关的表单控件上。 <label for"Name">Number:</label> <input type“text“ name"Name" id"Name…

【leetcode--判断子序列】

写了一版&#xff0c;发现这个记录的顺序不对&#xff0c;又去调试才看出来的&#xff0c;逻辑写错了&#xff0c;最近脑子真的不转。。。 class Solution:def isSubsequence(self, s: str, t: str) -> bool:r []for i in range(len(s)):if s[i] not in t:return Falseels…

Linux学习—Linux安全与防火墙

Linux安全基础 用户账户安全 强密码策略&#xff1a;确保所有用户使用强密码。最小权限原则&#xff1a;仅授予用户完成任务所需的最小权限。 定期更新系统 软件包更新&#xff1a;定期使用包管理器更新系统软件包&#xff0c;以修复安全漏洞。 sudo apt update &&…

MTK联发科MT6897(天玑8300)5G智能移动处理器规格参数

天玑 8300 采用台积电第二代 4nm 制程&#xff0c;基于 Armv9 CPU 架构&#xff0c;八核 CPU 包含 4 个 Cortex-A715 性能核心和 4 个 Cortex-A510 能效核心&#xff0c;CPU 峰值性能较上一代提升 20%&#xff0c;功耗节省 30%。 此外&#xff0c;天玑 8300 搭载 6 核 GPU Mal…

从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战七(axios请求头带上token)

本系列项目教程最终演示效果如下&#xff1a; 管理后台在线演示 上节遗留问题 上一节我们看到&#xff0c;页面刷新时&#xff0c;store中的数据丢失。表现在页面上是只要我们刷新页面&#xff0c;当前登录的用户名就丢失。这对使用系统的用户不是十分友好。另外&#xff0c…

uniapp原生插件开发实战——集成Android端的Twitter登陆

Android集成Twitter登陆的官方教程:https://github.com/twitter-archive/twitter-kit-android/wiki 项目创建 首先可以先看下uniapp原生插件开发教程 uniapp原生插件类型分为两种: Module模式:能力扩展,无嵌入窗体的UI控件,类似于功能插件。Component模式:在窗体中内嵌…

自然语言处理:第三十三章FILCO:过滤内容的RAG

文章链接: [2311.08377] Learning to Filter Context for Retrieval-Augmented Generation (arxiv.org) 项目地址: zorazrw/filco: [Preprint] Learning to Filter Context for Retrieval-Augmented Generaton (github.com) 在人工智能领域&#xff0c;尤其是在开放域问答和事…

Go微服务: 关于TCC分布式事务

TCC 分布式事务 T: Try 预处理, 尝试执行&#xff0c;完成所有的业务检查&#xff0c;做好一致性&#xff0c;预留必要的业务资源&#xff0c;做好准隔离性C: Confirm 确认&#xff0c;如果所有的分支Try都成功了, 就到了这个阶段, Confirm 是真正执行业务的过程, 不做任何业务…

【多模态】37、TextSquare | 借助 Gemini-Pro 通过四个步骤来生成高质量的文本问答数据

文章目录 一、背景二、方法2.1 Square-10M2.2 模型结构2.3 使用 Square-10M 进行有监督微调 三、效果3.1 实验设置3.2 Benchmark 测评 论文&#xff1a;TextSquare: Scaling up Text-Centric Visual Instruction Tuning 代码&#xff1a;暂无 出处&#xff1a;字节 | 华中科技…

linux 服务器上离线安装 node nvm

因为是离线环境 如果你是可以访问外网的 下面内容仅供参考 也可以继续按步骤来 node 安装路径 Node.js — Download Node.js nvm 安装路径 Tags nvm-sh/nvm GitHub 后来发现 nvm安装后 nvm use 版本号 报错 让我去nvm install 版本 我是内网环境 install不了 下面 你要 把安…

玄机平台应急响应—apache日志分析

1、前言 apache的日志一共有两个&#xff0c;一个是access.log&#xff0c;这个日志记录了所有对Web服务器的访问&#xff0c;被入侵时重点排查这个。另一个是error.log&#xff0c;错误日志记录了服务器运行期间遇到的各种错误&#xff0c;以及一些普通的诊断信息&#xff0c…

【Python】推荐比print更好用的调试方法

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【Vue】作用域插槽

插槽分类 默认插槽&#xff1a;组件内定制一处结构 具名插槽&#xff1a;组件内定制多处结构 插槽只有两种&#xff0c;作用域插槽不属于插槽的一种分类。作用域插槽只是插槽的一个传参语法 作用&#xff1a; 定义slot 插槽的同时, 是可以传值的。给 插槽 上可以 绑定数据&a…

LeetCode 算法:滑动窗口最大值c++

原题链接&#x1f517;&#xff1a;滑动窗口最大值 难度&#xff1a;困难⭐️⭐️⭐️ 题目 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动…

Python 树状数组

树状数组&#xff08;Binary Indexed Tree, BIT&#xff09;&#xff0c;又称为斐波那契堆&#xff0c;是一种数据结构&#xff0c;用于高效地解决以下问题&#xff1a; 单点更新&#xff1a;在数组的某个位置增加或减少一个值。区间查询&#xff1a;查询数组中一段连续区间的…

Skins

本主题解释如何将DevExpress主题/皮肤应用到应用程序中&#xff0c;如何允许用户在运行时在主题之间切换&#xff0c;如何自定义现有皮肤或创建自己的皮肤&#xff0c;等等。 WinForms订阅包括许多基本控件&#xff1a;按钮、复选框、表单、消息框、对话框、对话框等。 我们实现…

MFC 使用sapi文字转换为语音

文章目录 添加头文件声明变量 添加头文件 声明变量 pSpVoice NULL; //默认构造函数中初始化为空 bool CChKBarSCCodeApp::InitSpVoice() {HRESULT hr ::CoInitialize(NULL); // COM初始化if (!SUCCEEDED(hr)){AfxMessageBox(_T("声音环境初始化失败&#xff01;…