Java接口深度解析
一、为什么需要接口
接口是Java实现多态的重要机制,核心价值体现在:
- 实现多继承能力:突破单继承限制,允许类实现多个接口
- 规范系统解耦:制定通用标准,隔离实现与调用方
- 增强扩展性:通过接口组合实现功能模块的灵活装配
典型应用场景:
- 系统分层开发(DAO层接口)
- 插件式架构设计(可拔插功能模块)
- 回调机制(事件监听接口)
- API设计(定义服务契约)
二、接口与抽象类对比
特性 | 接口 | 抽象类 |
---|---|---|
构造方法 | 不可定义 | 可以定义 |
方法实现 | JDK8前只能抽象方法 | 可包含具体方法 |
继承机制 | 支持多实现 | 单继承 |
成员变量 | 默认public static final | 普通实例变量 |
应用场景 | 能力扩展/功能标准 | 公共代码复用/模板方法 |
三、接口定义与使用规范
基础语法:
// 接口声明
public interface MyInterface {// 常量(默认 public static final)String CONSTANT = "接口常量";// 抽象方法(默认 public abstract,可省略修饰符)void abstractMethod();// 默认方法(Java 8+,有方法体)default void defaultMethod() {System.out.println("默认方法实现");}// 静态方法(Java 8+,通过接口名直接调用)static void staticMethod() {System.out.println("静态方法实现");}
}// 实现接口的类
public class MyClass implements MyInterface {// 必须实现抽象方法@Overridepublic void abstractMethod() {System.out.println("抽象方法的具体实现");}// 可选:重写默认方法(非必须)@Overridepublic void defaultMethod() {System.out.println("重写后的默认方法");}
}// 使用示例
public class Main {public static void main(String[] args) {MyClass obj = new MyClass();obj.abstractMethod(); // 调用实现的抽象方法obj.defaultMethod(); // 调用默认方法(或重写后的版本)MyInterface.staticMethod(); // 直接通过接口调用静态方法System.out.println(MyInterface.CONSTANT); // 访问接口常量}
}
关键语法说明:
-
接口声明
- 使用
interface
关键字定义 - 命名建议使用形容词或名词(大驼峰式)
- 使用
-
成员组成:
- 抽象方法:无方法体,实现类必须重写
- 默认方法(Java 8+):用
default
修饰,提供默认实现,可被重写 - 静态方法(Java 8+):用
static
修饰,通过接口名直接调用 - 常量:隐式
public static final
,需初始化赋值
-
实现接口:
- 类用
implements
关键字实现接口 - 必须实现所有抽象方法(
default
和static
方法除外) - 可同时实现多个接口(Java 支持多接口继承)
- 类用
-
特性:
- 接口不能直接实例化
- 可继承其他接口(
extends
关键字,支持多继承) - 方法默认
public
访问权限,不可用其他修饰符
四、JDK8以后接口增强
interface EnglishSpeaker {// 抽象方法(必须实现)void speakEnglish();// JDK8默认方法(可选重写)default void showMaterial() {printFormat("提供标准英语教材"); // 调用私有方法}// JDK9私有方法(内部复用)private void printFormat(String content) {System.out.println("[国际交流] " + content);}// JDK8静态方法(工具方法)static boolean validateLevel(String level) {return level != null && level.matches("[A-C]\\d");}
}
版本特性对比:
JDK8新增:
- 默认方法:
default
修饰,解决接口扩展性问题 - 静态方法:接口专属工具方法
JDK9增强:
- 私有方法:
private
修饰,封装接口内部逻辑 - 私有静态方法:支持静态方法复用
五、适配器设计模式
解决问题:避免实现类重写所有接口方法
实现方案:
// 原始接口
interface MouseListener {void onClick();void onDoubleClick();void onRightClick();
}// 适配器类
abstract class MouseAdapter implements MouseListener {public void onClick() {}public void onDoubleClick() {}public void onRightClick() {}
}// 具体实现
class MyListener extends MouseAdapter {@Overridepublic void onClick() {System.out.println("单击处理");}
}
设计选择原则
- 优先使用接口:需要多继承、定义行为契约时
- 使用抽象类:需要代码复用、维护对象继承关系时
- 混合使用:通过抽象类实现公共代码,用接口扩展特殊能力
接口与抽象类的合理搭配,能有效提高代码的灵活性和可维护性,是面向对象设计的重要实践手段。开发者应根据具体场景选择合适方案,充分发挥Java语言的特性优势。
相关文章:
Java接口深度解析
一、为什么需要接口 接口是Java实现多态的重要机制,核心价值体现在: 实现多继承能力:突破单继承限制,允许类实现多个接口规范系统解耦:制定通用标准,隔离实现与调用方增强扩展性…...
VitePress 项目部署 cloudflare page 提示 npm run build 错误
构建的错误信息如下: 09:52:57.975 ➤ YN0000: Done with warnings in 3s 120ms 09:52:58.072 Executing user command: npm run build 09:52:58.817 npm ERR! Missing script: "build" 09:52:58.818 npm ERR! 09:52:58.818 npm ERR! To see a list of …...
#Hash 模式 vs History 模式
📌 一、概念对比:Hash 模式 vs History 模式 特性Hash 模式History 模式URL 样式http://example.com/#/homehttp://example.com/home是否刷新页面❌ 不会刷新(仅 hash 变化)✅ 通过 HTML5 API 控制,不刷新原理window.…...
图像融合(Image Fusion)是什么
图像融合(Image Fusion)将来自相同类型传感器或成像方式的多幅图像(通常内容是一样的)进行融合,提高图像清晰度、对比度、空间或时间分辨率。得到比原始图像更清晰或信息更丰富的图像 常见类型: 多时相图…...
基于YOLOV8的中草药识别检测系统(包含数据集+PyQt5界面+系统代码)
一、简介 本项目构建了基于 YOLOV8 深度学习网络模型的中草药识别检测系统。凭借 YOLOV8 卓越的性能,该系统能够高效、精准地识别检测大枣、 百合、黄连 、乌梅、厚朴 、牡蛎 、海马 、罗汉果 、甘草、三七、 通草、 薏苡仁、 枸杞子 、八角茴香等 50种常见植物中草…...
【愚公系列】《高效使用DeepSeek》066-纠纷解决话术
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
7. 解立方根
题目描述 给定一个正整数 N,请你求 N 的立方根是多少。 输入描述 第 1 行为一个整数 T,表示测试数据数量。 接下来的 T 行每行包含一个正整数 N。 1≤T≤105,0≤N≤105。 输出描述 输出共 T 行,分别表示每个测试数据的答案…...
【愚公系列】《Python网络爬虫从入门到精通》047-验证码识别(第三方验证码识别)
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
C++指针(二)
个人主页:PingdiGuo_guo 收录专栏:C干货专栏 前言 本篇是介绍数组指针与指针数组的概念,用处,操作以及练习的。点赞破五十,更新下一期。 文章目录 1.数组指针 1.1数组指针的概念 1.2数组指针的用处 1.3数组指针的操…...
C++有关内存的那些事
个人主页:PingdiGuo_guo 收录转栏:C干货专栏 前言 本篇博客是讲解关于C内存的一些知识点的。 文章目录 前言 1.内存函数 1.1memcpy函数 1.2memmove函数 1.3 memset函数 2.各数据类型占用 2.1bool类型 2.2char类型 2.3short、int、long类型及整数…...
4.11时钟延迟
时钟偏差:同一个时钟域内的时钟信号到达数字电路的各个部分(寄存器)所用的时间差异 信号达到目标寄存器与接收寄存器的时间差【一般默认信号经过电路时间不计,】 图源:优化时钟网络之时钟偏移-CSDN博客 时钟周期是计…...
下列软件包有未满足的依赖关系: python3-catkin-pkg : 冲突: catkin 但是 0.8.10-
下列软件包有未满足的依赖关系: python3-catkin-pkg : 冲突: catkin 但是 0.8.10- 解决: 1. 确认当前的包状态 首先,运行以下命令来查看当前安装的catkin和python3-catkin-pkg版本,以及它们之间的依赖关系: dpkg -l | grep ca…...
ANSI C 和 C89/C90
在嵌入式开发中提到的 ANSI 通常是指 ANSI C 标准,而 C89 是该标准的另一个名称。以下是详细的解释和两者的关系: 1. ANSI C 是什么? ANSI(American National Standards Institute,美国国家标准协会)在 19…...
git仓库中.git文件夹过大的问题
由于git仓库中存放了较大的文件,之后即使在gitignore中添加,也不会导致.git文件夹变小。 参考1 2 通过 du -d 1 -h查看文件大小 使用 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail…...
【android bluetooth 框架分析 01】【关键线程 6】【主线程与核心子线程协作机制】
主线程与核心子线程的协作机制 一、蓝牙进程中的线程架构全景图 在Android蓝牙协议栈中,线程分工非常明确,形成了一个高效的协作体系。我们可以将其想象成一个医院的组织架构: 主线程:相当于医院的"前台接待处"&#…...
蓝桥杯比赛 python程序设计——神奇闹钟
问题描述 小蓝发现了一个神奇的闹钟,从纪元时间(19701970 年 11 月 11 日 00:00:0000:00:00)开始,每经过 xx 分钟,这个闹钟便会触发一次闹铃 (纪元时间也会响铃)。这引起…...
旋转位置编码
旋转位置编码(Rotary Position Embedding,RoPE): 一种能够将相对位置信息依赖集成到 self-attention 中并提升 transformer 架构性能的位置编码方式。 和相对位置编码相比,RoPE 具有更好的外推性,目前是大模型相对位…...
2025年第十八届“认证杯”数学中国数学建模网络挑战赛【B题】完整版+代码+结果
2025年第十八届“认证杯”数学中国数学建模网络挑战赛B题完整word论文代码结果https://download.csdn.net/download/qq_52590045/90592749↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓…...
管理、切换多个 hosts工具之SwitchHosts
管理、切换多个 hosts工具之SwitchHosts 官网:https://switchhosts.vercel.app/zh github: https://github.com/oldj/SwitchHosts 原作者博客:https://oldj.net/article/2015/12/20/switchhosts-v3/ SwitchHosts是一个用于管理hosts文件的应用程序&…...
【Reinforcement Learning For Quadruped Control】2
奖励函数。奖励函数是状态和动作的函数 r t ( s t , a t , s t 1 ) r_t(s_t, a_t, s_{t1}) rt(st,at,st1),是强化学习(RL)算法的驱动力。在四足机器人等复杂系统的背景下,奖励可能是速度偏差与期望速度的差异、关节扭矩值…...
Windows启动总是卡在LOGO画面有哪些原因
1. 硬件问题 硬盘故障(HDD/SSD):坏道、损坏或接口松动。 内存故障:内存条接触不良或损坏。 外设冲突:U盘、移动硬盘、打印机等外接设备导致系统无法正常启动。 2. 系统文件损坏 Windows 关键文件丢失或损坏&#x…...
4月11日随笔
本来以为大风会很厉害,本来今天早八的微积分不想去了。但是起床发现并没有很大的风,还是去了。 中午回来的路上突然变天,雷阵雨转冰雹。下了大概半小时,所幸挨淋的不是很严重。 中午打了首胜,AI的基本弄完了…...
蓝桥杯 — — 接龙数列
蓝桥杯 — — 接龙数列 接龙数列 题源:0接龙数列 - 蓝桥云课 题目: 输入样例: 5 11 121 22 12 2023输出样例: 1分析: 首先观察评测用例规模, N N N 最大为 1 0 5 10^5 105,因此时间复杂度应…...
链式多分支规则树模型的应用
目录 引入 开始调用 初始化 执行流程 欢迎关注我的博客!26届java选手,一起加油💘💦👨🎓😄😂 引入 最近在学习一个项目中的链式多分枝规则树模型的使用,模型如下&#…...
【后端开发】初识Spring IoC与SpringDI、图书管理系统
文章目录 图书管理系统用户登录需求分析接口定义前端页面代码服务器代码 图书列表展示需求分析接口定义前端页面部分代码服务器代码Controller层service层Dao层modle层 Spring IoC定义传统程序开发解决方案IoC优势 Spring DIIoC &DI使用主要注解 Spring IoC详解bean的存储五…...
VMware虚拟机Ubuntu磁盘扩容
VMware中操作: 选择要扩容的虚拟机,点击编辑虚拟机设置 打开后点击磁盘——>点击扩展(注意:如果想要扩容的话需要删除快照) 调整到你想要的容量 点击上图的扩展——>确定 然后我们进到虚拟机里面 首先&#…...
嵌入式MCU常用模块
日后填坑。 无线通信模块 NRF24L01 基本介绍 使用方法 示例代码 蓝牙模块 基本介绍 使用方法 示例代码 WIFI模块 基本介绍 使用方法 示例代码 红外遥控模块 基本介绍 使用方法 示例代码 有线通信模块 can模块 基本介绍 使用方法 示例代码 传感器模块 DHT11模块 基本介绍 使用方…...
算法 模版
cin cout加快读取速度: ios::sync_with_stdio(false); 高精度*高精度 vector<int> mul(vector<int>& a, vector<int>& b) {vector<int>c(b.size()a.size()5,0);for (int i 0; i < a.size(); i) {for (int j 0; j < b.si…...
C++指针(三)
个人主页:PingdiGuo_guo 收录专栏:C干货专栏 文章目录 前言 1.字符指针 1.1字符指针的概念 1.2字符指针的用处 1.3字符指针的操作 1.3.1定义 1.3.2初始化 1.4字符指针使用注意事项 2.数组参数,指针参数 2.1数组参数 2.1.1数组参数的概念 2.1…...
二分查找4:35. 搜索插入位置
链接:35. 搜索插入位置 - 力扣(LeetCode) 题解: 本题是最基础的二分查找算法 class Solution { public:int searchInsert(vector<int>& nums, int target) {int left0;int rightnums.size()-1;int midleft(right-lef…...
数据可视化 —— 多边图应用(大全)
一、介绍: 多边形图,也就是在数据可视化中使用多边形来呈现数据的图表,在多个领域都有广泛的应用场景,以下为你详细介绍: 金融领域 投资组合分析:在投资组合管理中,多边形图可用于展示不同资…...
服务器加空间失败 growpart /dev/vda 1
[rootecm-2c5 ~]# growpart /dev/vda 1 unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2] [rootecm-2c5 ~]# xfs_info /dev/vda1 meta-data/dev/vda1 isize512 agcount21, agsize1310656 blks sectsz512 attr2, projid32bit1 crc1 finobt0…...
tree-sitter的grammar.js解惑
❓问题1:grammar.js 不是用正则表达式 /.../ 吗?为什么有 print 这样的字符串? ✅ 回答: grammar.js 分成两类“终结符”表示法: 表达方式含义xxx直接匹配该字符串字面量/regex/匹配符合正则的文本 💡 …...
前端-Vue3
1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月,最…...
【毕设通关】——文献查阅
目录 🕒 1. 常见文献库🕒 2. 快速寻找文献🕒 3. 引用网页资料 🕒 1. 常见文献库 中文文献: CNKI中国知网万方数据维普资讯超星期刊 英文文献: 谷歌学术Sci-hubOALib(Open Access Library&am…...
贪心算法-跳跃游戏
55.跳跃游戏 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。输入…...
程序化广告行业(75/89):行业发展与PC端和移动端投放差异
程序化广告行业(75/89):行业发展与PC端和移动端投放差异 在互联网广告领域,程序化广告正发挥着越来越重要的作用。今天,咱们就来一起深入了解一下程序化广告行业,希望能和大家一起学习进步,共同…...
Windows 下搭建 Git 本地服务器并进行开发
目录 1. 安装 Git for Windows 2. 创建本地 Git 仓库(裸仓库) 3. 设置本地开发环境 (1) 在开发机器上克隆仓库 (2) 提交代码 4. 远程访问本地 Git 服务器 方法 1:使用 SSH 访问 (1) 配置 SSH 服务器 (2) 客户端连接 方法 2…...
C++中stack函数的用法示例
C++中stack函数的用法示例 std::stack 是C++标准模板库(STL)中的一个容器适配器,它提供了后进先出(LIFO)的数据结构。以下是stack的一些常用函数及其用法示例: 1. 基本操作 #include <iostream> #include <stack>int main() {// 创建一个整数栈std::stack<…...
网络安全1
一、网络安全的定义与重要性 定义 网络安全(信息技术安全):保护计算机系统和网络免受电子攻击的技术和过程,包括保护个人信息和企业数据不被盗窃、破坏或非法访问。涵盖范围:网络设备、数据传输、系统运行安全。 重要…...
腾讯会议for flatpak
今天想切换opensuse,无意间查询了腾讯会议等软件的下载方式,发现腾讯会议是deb包安装的。但是过程中,我发现flatpak仓库中居然有腾讯会议,然后尝试着在wayland下的debian12中进行了安装。 发现居然可以正常开启视频等操作。 下载…...
【C++初学】C++核心编程技术详解(二):类与继承
函数提高 3.1 函数默认参数 函数的形参可以有默认值,调用时可以省略这些参数。 示例代码: int func(int a, int b 10, int c 10) {return a b c; }int main() {cout << "ret " << func(20, 20) << endl;cout <<…...
紧急任务插入,如何不影响原计划
面对紧急任务插入,为确保不影响原计划,需要做到:重新明确任务优先级、合理调整资源配置、灵活管理时间和任务、建立紧急任务处理流程、有效沟通与反馈。其中,重新明确任务优先级最为关键。这可以帮助项目团队快速确定哪些任务需立…...
蓝桥杯赛前题
开始每个人能量为3 答题了,答题者1 扣分最后算 #include<bits/stdc.h> using namespace std;const int N1e510; int a[N]; int main(){int n,k,q;cin>>n>>k>>q;for(int i1;i<n;i){a[i]k; }for(int i1;i<q;i){int x;cin>>x;a[…...
ETL的核心概念与价值
在数字化转型的浪潮中,数据已成为企业决策的基石。然而,面对分散、异构且质量参差不齐的数据源,如何高效整合并挖掘其价值?这一问题的答案,指向了一项关键的技术——ETL(Extract-Transform-Load)…...
神经动力学系统与计算及AI拓展
大脑,一个蕴藏在我们颅骨之内的宇宙,以活动脉动,如同由电信号和化学信号编织而成的交响乐,精巧地协调着思想、情感和行为。但是,这种复杂的神经元舞蹈是如何产生我们丰富多彩的精神生活的呢?这正是神经动力…...
力扣DAY46-50 | 热100 | 二叉树:展开为链表、pre+inorder构建、路径总和、最近公共祖先、最大路径和
前言 中等 、困难 √,越来越有手感了,二叉树done! 二叉树展开为链表 我的题解 前序遍历树,当遇到左子树为空时,栈里pop节点,取右子树接到左子树位置,同时断开该右子树与父节点的连接&#x…...
备赛蓝桥杯-Python-考前突击
额,,离蓝桥杯开赛还有十个小时,最近因为考研复习节奏的问题,把蓝桥杯的优先级后置了,突然才想起来还有一个蓝桥杯呢。。 到目前为止python基本语法熟练了,再补充一些常用函数供明天考前再背背,算…...
蓝桥杯 Web 方向入门指南:从基础到实战
一、蓝桥杯 Web 方向简介 蓝桥杯是国内最具影响力的编程竞赛之一,Web 方向主要考察前端开发和后端服务能力。比赛形式为 4 小时限时编程,题型包括页面布局、数据交互、API 开发等。根据最新大纲,大学组需掌握 HTML5、CSS3、JavaScript、Vue.…...
生命篇---心肺复苏、AED除颤仪使用、海姆立克急救法、常见情况急救简介
生命篇—心肺复苏、AED除颤仪使用、海姆立克急救法、常见情况急救简介 文章目录 生命篇---心肺复苏、AED除颤仪使用、海姆立克急救法、常见情况急救简介一、前言二、急救1、心肺复苏(CPR)(1)适用情况(2)操作…...