Java进阶----接口interface
接口
接口概述
- 接口是一种规范,使用接口就代表着要在程序中制定规范.
制定规范可以给不同类型的事物定义功能,例如:
- 利用接口,给飞机、小鸟制定飞行规范,让其都具备飞行的功能;
- 利用接口,给鼠标、键盘、音响制定连接规范,让其都具备连接的功能;
接口制定规范通常只规定有哪些功能,不限制功能的具体内容。需要由遵循规范的事物自己去实现,例如:
- 飞行规范只是让飞机、小鸟具备飞行的功能,但具体怎么飞,由它们自己决定
- 连接规范只是让鼠标、键盘、音响都拥有可以被连接的功能,但具体怎么连接,由它们自己决定
接口的定义格式
public interface Inter { // 常量// 抽象方法}
注意:
- 接口中的变量必须是常量,默认被 public static final 修饰
- 接口中的方法默认是抽象方法,默认被 public
abstract 修饰 - 接口不能创建对象
接口的使用方式
接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类
- 接口可以被类单实现,也可以被类多实现
- 注意:一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类
修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {……
}
接口和抽象类的区别
- 一个类只能继承一个抽象类,一个类可以实现多个接口。
- 继承父类和实现接口并不冲突,可以同时使用。
- 功能上:抽象类是对同一类型事物的抽取
(例如:猫和狗),接口是对不同类型事物具有相同行为的规范。
实例1:
public class Demo01 {public static void main(String[] args) {//需求:定义一个数学接口MathInter,给其定义成员变量PI(圆周率)和成员方法add(加法)//1.定义好接口后,尝试创建MathInter对象,代码报错(接口不能创建对象)//new MathInter();//2.使用MathInter提供的圆周率System.out.println(MathInter.PI);//3.尝试修改圆周率//MathInter.PI = 6.66;//4.要想使用接口,需要定义类去实现接口//定义Computer电脑类,实现Math数学接口//5.创建实现类对象,调用重写的方法Computer computer = new Computer();computer.add(1, 2);//6.需求:再定义一个播放接口PlayerInter,制定播放规范,让Computer去实现computer.play();}
}
public interface MathInter {//2.要求有圆周率提供给其他人使用//public static final double PI = 3.14;//注意:接口中的成员变量只能是常量,默认被 public static finaldouble PI = 3.14;//3.要求有加法//public abstract void add(int a, int b);//接口中的方法默认就被 public abstract修饰void add(int a, int b);
}
public interface PlayerInter {void play();
}
public class Computer implements MathInter, PlayerInter {//2.类实现接口,必须要重写接口的所有抽象方法!@Overridepublic void add(int a, int b) {System.out.println("加法结果:" + (a + b));}@Overridepublic void play() {System.out.println("播放小视频");}
}
实例二:
定义USB接口制定规范,要求所有USB设备都拥有接入(connect)和断开(disconnect)功能
- 定义Mouse鼠标类和Keyboard键盘类,要求实现USB接口,遵循USB制定的规范
- Mouse鼠标的特有功能:点击(click)
- Keyboard键盘的特有功能:打字( typewrite )
1.定义UsbInter接口,制定规则:接入(connect)和断开(disconnect)
public interface UsbInter {void connect();void disconnect();
}
2.定义鼠标Mouse类和键盘Keyboard类作为接口实现类,重写接口的方法
public class Keyboard implements UsbInter {@Overridepublic void connect() {System.out.println("接入键盘");}@Overridepublic void disconnect() {System.out.println("断开键盘");}//2.特有功能:打字public void typewrite() {System.out.println("键盘敲烂,月薪过万!");}
}public class Mouse implements UsbInter{@Overridepublic void connect() {System.out.println("鼠标连接");}public void Click(){System.out.println("鼠标点击");}@Overridepublic void disconnect() {System.out.println("鼠标断开");}}
3.分别创建Mouse鼠标对象和Keyboard键盘对象
public class Demo02 {public static void main(String[] args) {Mouse mouse = new Mouse();Keyboard keyboard = new Keyboard();//依次调用usb的接入方法、各自特有的方法、usb的断开方法mouse.connect();mouse.click();mouse.disconnect();System.out.println("-----------------");keyboard.connect();keyboard.typewrite();keyboard.disconnect();}
}
相关文章:
Java进阶----接口interface
接口 接口概述 接口是一种规范,使用接口就代表着要在程序中制定规范. 制定规范可以给不同类型的事物定义功能,例如: 利用接口,给飞机、小鸟制定飞行规范,让其都具备飞行的功能;利用接口,给鼠…...
【网络协议】ISIS
ISIS IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)协议是一种用于在自治系统(AS)内部进行路由选择的链路状态路由协议。它最初是为OSI(开放系统互连)网络设计的&…...
一.4 处理器读并解释储存在内存中的指令
此刻,hello.c源程序已经被编译系统翻译成了可执行目标文件hello,并被存放在硬盘上。要想在Unix系统上运行该可执行文件,我们将它的文件名输入到称为shell的应用程序中: linux>./hello hello, world linux> shell是一个命令…...
【Android面试八股文】Android性能优化面试题:怎样检测函数执行是否卡顿?
文章目录 卡顿一、可重现的卡顿二、不可重现的卡顿第一种方案: 基于 Looper 的监控方法第二种方案:基于 Choreographer 的监控方法第三种方案:字节码插桩方式第四种方案: 使用 JVMTI 监听函数进入与退出总结相关大厂的方案ArgusAPMBlockCanaryQQ空间卡慢组件Matrix微信广研参…...
C语言7 控制语句
目录 1. 条件语句 if 语句 if-else 语句 if-else if-else 语句 switch 语句 2. 循环语句 for 循环 while 循环 do-while 循环 3. 跳转语句 break 语句 continue 语句 return 语句 goto 语句 1. 条件语句 if 语句 if语句根据给定条件的真或假来决定是否执行某段…...
go mod 依赖管理补充2
依赖包的版本问题,别的开发语言有没有类似的问题?是怎么解决的? 举例:java java的依赖包的版本问题,通过Maven模块来操作,可以指定依赖包版本号,如下: go.mod 文件 go.mod文件是G…...
【Git】取消追踪多个文件或目录
文章目录 场景方法1. 添加到 .gitignore2. 从暂存区移除 示例1. 编辑 .gitignore 文件2. 从暂存区移除文件或目录 场景 清理:不再希望某些文件被 Git 追踪。配置忽略文件:通常配合 .gitignore 文件使用,以便以后这些文件不会被重新添加到索引…...
【Linux详解】进程等待 | 非阻塞轮询
引入: 为什么?是什么?怎么办 是什么? 进程等待是指父进程暂停自己的执行,直到某个特定的子进程结束或发生某些特定的事件。 为什么? 僵尸进程刀枪不入,不可被杀死,存在内存泄露…...
聊一下Maven打包的问题(jar要发布)
文章目录 一、问题和现象二、解决方法(1)方法一、maven-jar-pluginmaven-dependency-plugin(2)方法二、maven-assembly-plugin 一、问题和现象 现在的开发一直都是用spring boot,突然有一天,要自己开发一个…...
JavaScript中,正则表达式所涉及的api,解析、实例和总结
JS中正则的api包括以下: String#searchString#splitString#matchString#replaceRegExp#testRegExp#exec 1. String#search 查找输入串中第一个匹配正则的index,如果没有匹配的则返回-1。g修饰符对结果无影响 var string "abbbcbc"; var r…...
【计算机】同步/异步
同步/异步 在计算机科学和编程中,“同步”(Synchronization)是一种机制,用于协调不同进程或线程之间的操作,以避免竞态条件(race conditions)、死锁(deadlocks)和其他并…...
谈大语言模型动态思维流程编排
尽管大语言模型已经呈现出了强大的威力,但是如何让它完美地完成一个大的问题,仍然是一个巨大的挑战。 需要精心地给予大模型许多的提示(Prompt)。对于一个复杂的应用场景,编写一套完整的,准确无误的提示&am…...
工厂自动化相关设备工业一体机起到什么作用?
在当今的制造业领域,工厂自动化已成为提高生产效率、保证产品质量和降低成本的关键。在这一进程中,工业一体机作为一种重要的设备,发挥着不可或缺的作用。 工业一体机是自动化生产线上的控制中心。它能够整合和处理来自各个传感器、执行器和其…...
哈佛大学 || 概念空间中学习动态的涌现:探索隐藏能力
获取本文论文原文PDF,请在公众号【AI论文解读】留言:论文解读 今天主要看一个问题:在模型中的学习动态是如何涌现的。 在现代生成模型的研究与应用中,不断发现这些模型在处理训练数据时展现出了惊人的能力,这些能力很…...
Dockerfile打包部署常用操作
文章目录 1、Dockerfile部署java程序(jar包)1.1、创建Dockerfile1.2、将Dockerfile和要上传的jar包放到一个目录下,构建镜像1.3、创建启动容器 2、Dockerfile部署vue2.1、创建dockerfile文件2.2、将打包的dist文件放到dockerfile同文件目录下…...
ArcGIS:探索地理信息系统的强大功能与实际应用
ArcGIS是一款功能强大的地理信息系统(GIS)软件,由Esri公司开发。它广泛应用于各个领域,包括城市规划、环境保护、资源管理、交通运输等。作为一名长期使用ArcGIS的用户,我深感这款软件在数据分析、地图制作和空间信息管…...
Python 全栈体系【三阶】(二)
第一章 Django 五、模板 1. 概述 Django中的模板是指可以动态生成任何基于文本格式文件的技术(如HTML、CSS等)。 Django中内置了自己的模板系统,称为DTL(Django Template Language), Django模板语言。 2. 配置 settings.py中关于模板的…...
【VUE】 深入理解 Vue 动态路由:简介、实际开发场景与代码示例
深入理解 Vue 动态路由:简介、实际开发场景与代码示例 Vue.js 是一个用于构建用户界面的渐进式框架,它拥有丰富的生态系统,其中 Vue Router 是其官方的路由管理库。动态路由是 Vue Router 的一个强大特性,允许我们在应用运行时根…...
Linux x86_64平台指令替换函数 text_poke_smp/bp
文章目录 前言一、text_poke_early1.1 text_poke_early简介1.2 用途 二、text_poke_smp2.1 简介2.1.1 text_poke_smp函数2.2.2 stop_machine_text_poke简介2.2.3 text_poke函数 2.2 用途 三、text_poke_smp 内核hook 前言 Linux x86_64平台指令替换函数有两种类型:…...
海南云亿商务咨询有限公司口碑怎么样?
在数字化浪潮席卷全球的今天,电商行业正以前所未有的速度发展。抖音作为短视频领域的佼佼者,其电商功能更是为众多品牌和企业打开了全新的销售渠道。海南云亿商务咨询有限公司,作为抖音电商服务领域的佼佼者,正以其专业的服务和创…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
