当前位置: 首页 > news >正文

Java进阶----接口interface

接口

接口概述

  • 接口是一种规范,使用接口就代表着要在程序中制定规范.

制定规范可以给不同类型的事物定义功能,例如:

  • 利用接口,给飞机、小鸟制定飞行规范,让其都具备飞行的功能;
  • 利用接口,给鼠标、键盘、音响制定连接规范,让其都具备连接的功能;

接口制定规范通常只规定有哪些功能,不限制功能的具体内容。需要由遵循规范的事物自己去实现,例如:

  • 飞行规范只是让飞机、小鸟具备飞行的功能,但具体怎么飞,由它们自己决定
  • 连接规范只是让鼠标、键盘、音响都拥有可以被连接的功能,但具体怎么连接,由它们自己决定

接口的定义格式

public interface Inter {   // 常量// 抽象方法}

注意:

  1. 接口中的变量必须是常量,默认被 public static final 修饰
  2. 接口中的方法默认是抽象方法,默认被 public
    abstract
    修饰
  3. 接口不能创建对象

接口的使用方式

接口是用来被类实现(implements)的,实现接口的类称为实现类。实现类可以理解成所谓的子类

  • 接口可以被类单实现,也可以被类多实现
  • 注意:一个类实现接口,必须重写完全部接口的全部抽象方法,否则这个类需要定义成抽象类
修饰符 class 实现类 implements 接口1, 接口2, 接口3 , ... {……
}

接口和抽象类的区别

  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平台指令替换函数有两种类型:…...

海南云亿商务咨询有限公司口碑怎么样?

在数字化浪潮席卷全球的今天,电商行业正以前所未有的速度发展。抖音作为短视频领域的佼佼者,其电商功能更是为众多品牌和企业打开了全新的销售渠道。海南云亿商务咨询有限公司,作为抖音电商服务领域的佼佼者,正以其专业的服务和创…...

vscode里如何用git

打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

python/java环境配置

环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用&#xff0c;前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率&#xff0c;还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库&#xff08;Naive UI、Element …...