Java 接口
文章目录
- 1、接口的概念
- 2、接口的定义
- 3、接口的使用
- 4、接口和抽象类
1、接口的概念
类是一种具体的实现体,而接口定义了一种规范(抽象方法),接口定义了某一批类所需要遵循的规范,接口不关心类内部的属性和方法的具体实现,只规定这批类必须提供某些方法,提供这些方法的类就可满足对接口的使用。
接口是从多个相似类中抽象出来的规范,不提供具体的实现。
接口体现的是【规范】和【实现】分离的设计哲学。
接口是一种引用数据类型。
2、接口的定义
接口定义的基本语法:
[修饰符] interface 接口名称 extends 父接口1, 父接口2,...{// 静态常量// 抽象的实例方法(普通方法)// 内部类、内部接口、内部枚举(都是静态的)// 默认方法(实例方法,由接口的实现类的实例来调用)、类方法(静态方法)// 私有方法(java 9 提供)
}
说明:
- 修饰符:public / 省略(包权限)
- 接口名称和类名遵循相同命名规则
- 类是单继承:一个类的直接父类只能有一个
- 接口是多继承:一个接口的直接父类可以有多个
- 接口只能继承接口,不能继承类;
- 类与类之间是单继承;类与接口之间是多实现;接口与接口之间是多继承;接口不能继承类。
- 接口是一种公共行为规范,不能包含构造器和代码块
- 接口里的常量、方法(抽象方法、默认方法、类方法)、内部类、枚举、接口都是 public 访问权限
- 私有方法既可以是类方法,也可以是实例方法
- 默认方法使用 default 修饰(注:这里的 default 不是访问控制修饰符)
常量
语法格式:
[public] [static] [final] 变量名称 = 变量值;
抽象方法
接口里的普通方法默认为抽象方法。
语法格式:
[public] [abstract] 返回值类型 方法名称(形参列表);
默认方法
语法格式:
[public] default 返回值类型 方法名称(形参列表){// 方法体
}
静态方法
从 java 8 开始,允许在接口里定义类方法,类方法必须使用 static 修饰,不能使用 default 修饰。无论程序是否指定访问控制修饰符,类方法总是使用 public 修饰。
如果没有指定 public,系统会自动为类方法添加 public 修饰符。类方法可以直接使用接口来调用。
语法格式:
[public] static 返回值类型 方法名称(形参列表){// 方法体
}
实例私有方法
当两个默认方法(或类方法)中包含一段相同的实现逻辑时,程序必然考虑将这段实现逻辑抽取成工具方法,而工具方法是应该被隐藏的,这就是 java 9 增加私有方法的必然性。
实例私有方法:解决多个默认方法之间重复代码的问题。
静态私有方法:解决多个静态方法之间重复代码的问题。
私有方法只有接口自己才能调用,不能被实现类或别人调用
语法格式:
private 返回值类型 方法名称(形参列表){// 方法体
}
类私有方法
语法格式:
private static 返回值类型 方法名称(形参列表){// 方法体
}
示例
// 使用关键字 interface 定义一个接口
public interface InterfaceTest {// 接口里没有构造器和代码块// 定义变量// 类常量 自动用 public static final 修饰public static final int MAX_SIZE = 20;// 定义方法// 抽象方法、默认(实例)方法、类方法 都用 public 修饰// 抽象方法public abstract void abstractMethod();// 类方法public static void staticMethod() {}// 默认方法(实例方法,由接口的实现类的实例来调用)public default void defaultMethod() {}// 私有方法(java9)/*private void privateMethod(){ }*/// 接口里定义:内部类、接口、枚举,自动用 public static 修饰// 静态内部类public static class StaticInnerClass {}// 接口public static Comparable COMPARABLE = null;// 枚举public static Enum ENUM = null;
}
3、接口的使用
接口的主要用途就是被实现类实现。
类实现接口的语法格式:
[修饰符] class 类名称 extends 基类 implements 接口1, 接口2, ...{}
说明:
- 继承使用 extends 关键字;实现使用 implements 关键字。
- 一个类可以实现多个接口,也是 java 为单继承灵活性不足所做的补充。
- 实现接口与继承父类类似,一样可以获得接口里常量(包括成员变量)、方法(包括默认方法和抽象方法)。
- implements 部分必须放在 extends(如果有) 之后
在接口里声明引用类型变量 同样使用 public static final 修饰
不能直接使用接口来创建实例,但可以在接口里声明引用类型变量。
能够对实例进行初始化的地方有三个:声明的同时赋值,代码块、构造器。
因为接口里无代码块和构造器,所以一旦在接口里声明了引用类型变量,同时还要对它进行初始化赋值。
注:
1、实现接口里的方法时,必须使用 public 访问控制修饰符,因为接口里的方法都是 public 的,而子类(相当于实现类)重写父类方法时,访问权限只能更大或相等,所以实现类实现接口里的方法时只能使用 public 访问权限。
2、一个类实现了一个或多个接口之后,这个类必须完全实现(重写)这个接口里的所有抽象方法。否则将保留从父接口那继承的抽象方法,该类也必须定义为抽象类。
除了抽象方法之外,接口里的默认方法也可以被实现类覆盖重写。
默认方法,可以解决接口升级的问题
interface B {default void test(){System.out.println("B-->默认方法");}}class A implements B{@Overridepublic void test() {System.out.println("A-->默认方法");}
}
注:
- 不能通过接口实现类(或者接口实现类对象)来调用接口中的静态方法
- 如果实现类所实现的多个接口当中,存在重复的抽象方法,那么只需要覆盖重写一次即可。
- 如果实现类没有覆盖重写所有接口当中的所有抽象方法,那么实现类就必须是一个抽象类。
- 如果实现类所实现的多个接口当中,存在重复的默认方法,那么实现类一定要对冲突的默认方法进行覆盖重写。
- 一个类如果直接父类当中的方法,和接口当中的默认方法产生了冲突,优先用父类当中的方法。
- 多个父接口当中的抽象方法如果重复,没关系。
- 多个父接口当中的默认方法如果重复,那么子接口必须进行默认方法的覆盖重写,而且带着 default 关键字。
4、接口和抽象类
相同点
- 无法实例化,用于被其他类实现或继承。
- 都包含抽象方法,实现接口或继承抽象类的子类都必须实现这些抽象方法。
不同点(用法上)
- 接口里的普通方法即为抽象方法;而抽象类既可以有普通方法,也可以有抽象方法
- 接口里没有代码块和构造器;而抽象类里有
- 接口里只有静态常量;而抽象类里可以有静态变量,也可以有实例变量
- 接口之间可以是多继承;而抽象类的类与类之间也是单继承
接口主要是作为一种公共规范标准(通信标准、耦合标准)来使用。
而抽象类主要是一种模板式设计。
相关文章:
Java 接口
文章目录1、接口的概念2、接口的定义3、接口的使用4、接口和抽象类1、接口的概念 类是一种具体的实现体,而接口定义了一种规范(抽象方法),接口定义了某一批类所需要遵循的规范,接口不关心类内部的属性和方法的具体实现…...
【React】react-router 路由详解
🚩🚩🚩 💎个人主页: 阿选不出来 💨💨💨 💎个人简介: 一名大二在校生,学习方向前端,不定时更新自己学习道路上的一些笔记. 💨💨💨 💎目…...
DaVinci 偏好设置:系统 - 内存和 GPU
偏好设置 - 系统/内存和 GPUPreferences - System/Memory and GPU内存和 GPU Memory and GPU 选项卡提供了内存配置以及 GPU 配置的相关设置。内存配置Memory Configuration系统内存System Memory列出了所用电脑的总的可用内存。限制 Resolve 内存使用到Limit Resolve memory u…...
视频知识点(22)- 教你认清楚YUV420P和YUV420SP的真正差异在哪里
*《音视频开发》系列-总览* 前言 在视频技术领域,存在着非常多的颜色空间模型,YUV颜色空间就是其中之一。我们没有必要把所有的颜色空间都搞明白,只需要关注自己所从事的领域的常用颜色空间模型即可,同样,YUV颜色空间模型也有非常多的子类型,我们也没有必要都搞得清清楚楚…...
企业电子招标采购系统源码Spring Cloud + Spring Boot + MybatisPlus + Redis + Layui
项目说明 随着公司的快速发展,企业人员和经营规模不断壮大,公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境,最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范,以及…...
面试常问-Alpha测试和Beta测试
Alpha测试 Alpha测试是一种验收测试,在识别典型用户可能执行的任务并对其进行测试之前,执行该测试是为了识别所有可能的问题和错误。 尽可能简单地说,这种测试之所以被称为alpha,只是因为它是在软件开发的早期、接近开发结束时和…...
html理论基础
组织:中国互动出版网(http://www.china-pub.com/)RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)E-mail:ouyangchina-pub.com译者:黄俊(hujiao hj_c…...
【安卓开发】数据存储全方案--详解持久化技术
读书笔记系列:第一行代码 Android 6.1 持久化技术简介 三种数据持久化方式:文件存储、SharedPreference存储以及数据库存储,除此之外还可以存储在SD卡中(不安全) 6.2 文件存储 该方法不对存储的内容做格式化处理都…...
Vue项目实战
一、产品开发的大致流程 一般公司流程如下: 1、产品经理设计产品原型图 2、UI设计师设计符合需求的原型UI图 3、前端100%还原高保真UI设计图 4、后端设计接口 5、前后端接口联调 6、前后端功能自测 7、测试、运维进行产品的测试和上线 一般大型公司流程如下&…...
Github 学生优惠包 -- 最新防踩坑指南
Github学生优惠包的申请最近越来越麻烦,里面有非常多的坑,留下此文防止各位申请的时候踩到。 此文面向中国大陆真正有学生身份的同学!!! 文章目录前言1.用到的网址2.申请所需3.详细步骤4.踩坑点前言 记得在一年以前还…...
2023年美国大学生数学建模A题:受干旱影响的植物群落建模详解+模型代码(二)
前言 资源放CSDN上面过不了审核,都快结束了都没过审真的麻了,订阅专栏的同学直接加我微信直接发你。我只打造优质专栏。专注建模四年,博主参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使…...
第47章 后端管理首页与Axios拦截守卫原理
1 404全局拦截 1.1 定义布局页:src\views\ 404View.vue <template> <el-container> <el-main> </el-main> <el-footer> <h1>大人,你要找的页面离家出走了!小的正在努力寻找中…</h1> </el-fo…...
【前端】小程序开发入门:安装开发工具、目录结构与项目配置
文章目录前期准备目录结构app.jsonpageswindow其他前期准备 开发小程序要先申请一个对应的AppID:微信小程序 (qq.com) 微信官方小程序开发文档:微信开放文档 (qq.com) 然后安装一个小程序开发工具: 选择稳定版: 安装后打开&…...
Java反序列化漏洞——CommonsBeanutils1链分析
一、了解Apache Commons BeanutilsApache Commons Beanutils 是 Apache Commons 工具集下的另一个项目,它提供了对普通Java类对象(也称为JavaBean)的一些操作方法。在Java中,有很多class的定义都符合这样的规范若干private实例字段…...
三菱PLC的MC协议配置说明
三菱PLC的MC协议配置说明先说一下弱智的踩坑记录详细配置过程1、三菱Q02H CPUQJ71E71-100以太网模块设置MC协议1.1 PLC编程线连接与编程线驱动安装1.2 PLC通讯测试1.3 PLC MC协议设置1.4 PLC断点重启1.5 网络调试助手测试2、三菱Q03UDE CPU内置以太网设置MC协议2.1 PLC编程线连…...
Python基础复习总结
文章目录Python基础复习Python的下载与安装标识符关键字模块条件、循环语句if elif elsefor循环while循环成员测试Python中的数据类型序列列表 list元组 tuple集合 set字典 dictPython关系运算算术运算符比较运算符逻辑运算符位运算符赋值运算符运算符优先级字符串表示字符串字…...
【Linux操作系统】【综合实验五 网络管理与通信】
文章目录一、实验目的二、实验要求三、实验内容四、实验报告要求一、实验目的 要求了解和熟悉Linux网络客户/服务器管理模式(client/server)与网络环境的配置;熟悉网络远程登录模式与TCP/IP常见终端命令的使用;学会使用在线通信与…...
Qt下实现不规则形状窗口显示
文章目录前言一、资源文件的添加二、初始化窗口三、重写paintEvent函数实现窗口重绘四、重写QMouseEvent相关函数实现不规则窗口的移动及关闭五、demo完整代码六、下载链接总结前言 本文实现了Qt下显示两个不规则形状的窗口demo,其中有Qt的窗口对话框和QPaintEvent…...
使用ribbon实现负载均衡
1.新建两个provider:springcloud-provider-dept-8002 2. 配置跟8001一样 整合 Ribbon 由上述可知,Ribbon 是需要集成在消费端的 所以在消费端 : springcloud-03-consumer-dept-8082 进行修改 在 POM 文件中添加 Ribbon、Eureka 依赖 <!--…...
从页面仔到工程师,前端到底在发挥什么价值
玉伯在前端圈子里摸爬滚打十几年,他对前端价值的理解是什么样的?在他眼里,前端到底是一个怎样的岗位?我们带着这样的问题向他提问。支付宝体验技术部是前端同学最希望加入的团队之一,玉伯带领这个团队做出诸多创新产品…...
云原生应用的可观测性最佳实践
云原生应用的可观测性最佳实践 🔥 硬核开场 各位技术老铁,今天咱们聊聊云原生应用的可观测性最佳实践。别跟我扯那些理论,直接上干货!在云原生时代,可观测性是系统可靠性的关键,它能帮助我们全面了解系统…...
lil_tea c++ 2023 style guide
调试 我觉得调试是最重要的, 所以放在最开头. 调试, 最最最重要的, sudo apt remove gdb (这只是个玩笑, 不要真的执行). 深入学习贯彻 fail fast 原则, 在出现错误时直接退出程序, 而不是使用 try throw catch. 编写程序的时候假设所有东西不会出错, 然后每当出现程序异常退…...
中国AI Agent发展现状与生态分析
中国AI Agent发展现状与生态分析 1. 标题 (Title) [从“工具助手”到“决策伙伴”:全景拆解中国AI Agent的爆发逻辑、玩家图谱与下一个十年机遇][万字深度:202X中国AI Agent发展白皮书——技术攻坚、商业落地与生态全景解析][抢滩AGI入口之战:…...
基于stm32的红外体温计设计[单片机]-计算机毕业设计源码+LW文档
摘要:本文详细阐述了一款基于STM32单片机的红外体温计设计过程。该设计综合运用红外测温技术、单片机控制技术以及OLED显示技术等,实现了对人体体温的快速、精准测量与直观显示。通过硬件电路设计与软件程序编写,完成了包括红外测温模块、单片…...
从春招到Offer:一位应届生的多益网络软件开发求职全记录
1. 春招末班车:从"破罐破摔"到投出第一份简历 五月的广州已经热得让人喘不过气,我的求职焦虑却比天气更让人窒息。看着身边同学一个个晒出offer,我才惊觉自己错过了整个金三银四。毕设和论文像两座大山,把求职计划硬生生…...
终极实战指南:Godot PCK解包器深度解析与高效资源提取
终极实战指南:Godot PCK解包器深度解析与高效资源提取 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 在游戏开发与逆向工程领域,Godot引擎的PCK文件格式一直是技术爱好者关注…...
LiuJuan Z-Image Generator完整指南:宽松加载strict=False适配非标权重
LiuJuan Z-Image Generator完整指南:宽松加载strictFalse适配非标权重 1. 引言:当定制权重遇上标准模型 你有没有遇到过这种情况?好不容易找到一个效果惊艳的定制版模型权重,兴冲冲地下载下来,结果在加载时却报了一堆…...
MacBook Pro 触控板锁屏快捷设置指南
1. 为什么需要触控板快速锁屏功能 作为一个每天要处理大量敏感文档的MacBook Pro用户,我深刻理解快速锁屏的重要性。想象一下这样的场景:你正在咖啡馆处理工作邮件,突然需要去洗手间或者接电话,这时候如果慢慢点击菜单栏或者记忆复…...
如何高效管理ExHentai漫画收藏:终极标签化管理解决方案
如何高效管理ExHentai漫画收藏:终极标签化管理解决方案 【免费下载链接】exhentai-manga-manager ExHentai本地漫画标签管理阅读应用, ExHentai local manga tag-manager and reader 项目地址: https://gitcode.com/gh_mirrors/ex/exhentai-manga-manager 你…...
Path of Building PoE2:流放之路2终极角色规划器完整指南
Path of Building PoE2:流放之路2终极角色规划器完整指南 【免费下载链接】PathOfBuilding-PoE2 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding-PoE2 还在为《流放之路2》复杂的角色构建而头疼吗?每次天赋加点都犹豫不决&am…...
