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

【JavaSE】接口 详解(上)

前言

本篇会讲到Java中接口内容,概念和注意点可能比较多,需要耐心多看几遍,我尽可能的使用经典的例子帮助大家理解~

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

接口

语法

注意

 代码理解

接口运用举例

IUSB接口

KeyBoard类

Mouse类

Computer类

多个接口

代码理解(语法层面)

接口解决多继承问题 代码示例

Animal类

IFly、IRunning、ISwimming接口

Fish类

Duck类

再加上一个测试

接口间的继承

代码理解


接口

接口是公共的行为规范标准,在Java中,接口是多个类的公共规范,是一种引用数据类型

语法

  1. 定义格式与类基本相同,将class关键字换成interface关键字
  2. 接口中的成员变量(习惯上是大写)默认为public static final 修饰的(写的时候可省略public static final),必须被初始化
  3. 接口中的方法默认只能是public abstract 修饰的(也可省略不写,不写默认也是抽象方法(不能有具体的实现,否则会报错),用其他修饰符会报错)
  4. 接口中使用default修饰的方法static修饰的方法是可以有具体的实现
  5. 接口中不能有静态代码块、示例代码块构造方法
  6. 接口虽然不是类,但编译完成后也是字节码文件(后缀名是.class)。

注意

  • 创建接口时, 接口的命名一般以大写字母 I 开头
  • 接口的命名一般使用 "形容词" 词性的单词.
  • 阿里编码规范中约定, 接口中的方法和属性不要加任何修饰符号, 保持代码的简洁性.

 代码理解

package demo2inter;public interface ITestInterFace {public static final int a=100;int AGE=10;abstract public void fun1();void fun2();default void func(){System.out.println("default!");}public static void staticFunc(){System.out.println("staticFunc!");}
}

接口的简单使用

  1. 接口不能被实例化
  2. 接口需要被类实现,需要使用关键字implements来实现
  3. 当一个类实现类这个接口,那么这个类要重写这个方法
  4. 接口也可以发生向上转型、动态绑定和多态。

public interface ITestInterFace {void draw();}
class Rect implements ITestInterFace{@Overridepublic void draw() {System.out.println("画一个矩形!");}
}
class Triangle implements ITestInterFace{@Overridepublic void draw() {System.out.println("画一个三角形!");}
}
class Test{public static void drawMap(ITestInterFace iTestInterFace){iTestInterFace.draw();}public static void main(String[] args) {drawMap(new Rect());//发生了向上转型和动态绑定drawMap(new Triangle());}
}

接口运用举例

请实现笔记本电脑使用USB鼠标、USB键盘的例子

  1. USB接口:包含打开设备、关闭设备功能
  2. 笔记本类:包含开机功能、关机功能、使用USB设备功能
  3. 鼠标类:实现USB接口,并具备点击功能
  4. 键盘类:实现USB接口,并具备输入功能

在包demo3中,创建3个类,一个接口

IUSB接口

package demo3;public interface IUSB {// USB接口void openDevice();//打开服务void closeDevice();//关闭服务}

KeyBoard类

package demo3;public class KeyBoard implements IUSB {@Overridepublic void openDevice() {System.out.println("打开键盘!");}@Overridepublic void closeDevice() {System.out.println("关闭键盘!");}public void input(){System.out.println("键盘输入!");}
}

Mouse类

package demo3;public class Mouse implements IUSB{@Overridepublic void openDevice() {System.out.println("打开鼠标!");}@Overridepublic void closeDevice() {System.out.println("关闭鼠标!");}public void click(){System.out.println("点击鼠标!");}
}

Computer类

package demo3;import demo2inter.ITestInterFace;public class Computer {public void powerOff (){System.out.println("关闭电脑!");}public void powerOn(){System.out.println("打开电脑!");}public void useDevice(IUSB usb){usb.openDevice();//这里要区分 USB引用了哪个对象if(usb instanceof Mouse){Mouse mouse =(Mouse) usb;//向下转型mouse.click();}//调用键盘if(usb instanceof KeyBoard){KeyBoard keyBoard=(KeyBoard) usb;keyBoard.input();}usb.closeDevice();}public static void main(String[] args) {Computer computer=new Computer();computer.powerOn();computer.useDevice(new KeyBoard());//向上转型computer.useDevice(new Mouse());computer.powerOff();}
}

多个接口

Java中不支持多继承,但是一个类可以实现多个接 口。接口表达含义是 具有**特性,可以帮助程序员忘掉类型,只关注特性。

代码理解(语法层面)

类TestDemo4实现了IA和IB接口

package demo4;//多个接口
interface IA{void testA();
}
interface IB{void testB();
}
class TestDemo4 implements IA,IB{@Overridepublic void testA() {System.out.println("testA()");}@Overridepublic void testB() {System.out.println("testB()");}
}
public class Test4 {public static void main(String[] args) {TestDemo4 testDemo4=new TestDemo4();testDemo4.testA();testDemo4.testB();}}

接口解决多继承问题 代码示例

在demomoreinher包中有Animal抽象类,Duck,Fish类 以及IFly、IRunning、ISwimming接口

Animal类

IFly、IRunning、ISwimming等动物特性应该采用接口方式

package demomoreinher;public abstract class Animal {protected String name;protected int age;public Animal(String name, int age) {this.name = name;this.age = age;}public abstract void eat();//像跑 游泳 飞等动作不能写在这里,因为不是所有动物都会这些技能  应该写在接口中
}

IFly、IRunning、ISwimming接口

//注意:这里的代码是在不同IFly、IRunning、ISwimming接口文件中的
public interface IFly {void fly();
}public interface IRunning {void run();
}public interface ISwimming {void swim();
}

Fish类

鱼只会游泳这项特性,所以接口ISwimming

package demomoreinher;public class Fish extends Animal implements ISwimming{//如果这里游泳写出类,java是不支持多继承的,所有说接口解决了多继承问题public Fish(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+"吃鱼粮!");}@Overridepublic void swim() {System.out.println(this.name+"游泳~");}
}

Duck类

而鸭子游泳,跑,飞这3个技能都会,所以三个特性都接上

package demomoreinher;public class Duck extends Animal implements ISwimming,IFly,IRunning{public Duck(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println(this.name+"吃鸭粮!");}@Overridepublic void fly() {System.out.println(this.name+"飞~~~");}@Overridepublic void run() {System.out.println(this.name+"跑~~~");}@Overridepublic void swim() {System.out.println(this.name+"游泳~~~");}
}

再加上一个测试

package demomoreinher;public class TestAnimal {public static void eatFunc(Animal animal){animal.eat();//实现eat的动态绑定}public static void walk(IRunning running){running.run();//实现跑的动态绑定}public static void main(String[] args) {walk(new Duck("唐老鸭",3));eatFunc(new Fish("灵儿",2));}
}

测试结果

接口间的继承

相当于将接口合并在一起了

代码理解

IC继承了IA和IB,使IC接口的功能包含了IA和IB的功能,当然类TestDeme在实现接口IC时,要将IA,IB和IC的方法一起都要重写

package demo5;//接口继承问题
interface IA{void testA();
}
interface IB{void testB();
}
//IC接口不仅具备了自己的testC这个功能,还 扩展 了IA和IB的功能
interface IC extends IA,IB{void testC();}
class TestDemo implements IC{@Overridepublic void testA() {System.out.println("testA()");}@Overridepublic void testB() {System.out.println("testB()");}@Overridepublic void testC() {System.out.println("testC()");}
}

相关文章:

【JavaSE】接口 详解(上)

前言 本篇会讲到Java中接口内容,概念和注意点可能比较多,需要耐心多看几遍,我尽可能的使用经典的例子帮助大家理解~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 接口 语法…...

嵌入式C基础——循环队列 ringbuffer 讲解

本期主题: 讲解ARRAY_SIZE的作用以及定义,还有一个踩坑分析 往期链接: 数据结构系列——先进先出队列queue数据结构系列——栈 stackLinux内核链表零长度数组的使用inline的作用嵌入式C基础——ARRAY_SIZE使用以及踩坑分析 目录 1. Ringbuff…...

【动态规划-状态压缩dp】【蓝桥杯备考训练】:毕业旅行问题、蒙德里安的梦想、最短Hamilton路径、国际象棋、小国王【已更新完成】

目录 1、毕业旅行问题(今日头条2019笔试题) 2、蒙德里安的梦想(算法竞赛进阶指南) 3、最短Hamilton路径(《算法竞赛进阶指南》&模板) 4、国际象棋(第十二届蓝桥杯省赛第二场C A组/B组&#…...

全坚固笔记本丨工业笔记本丨三防笔记本相较于普通笔记本有哪些优势?

三防笔记本和普通笔记本在设计和性能方面存在显著差异,三防笔记本相较于普通笔记本具备以下优势: 三防笔记本通常采用耐磨、耐摔的材料,并具有坚固的外壳设计,能够承受恶劣环境和意外碰撞,有效保护内部组件不受损坏。相…...

机房搬迁方案

一、项目背景 随着XX公司业务的不断扩展,现有的机房设备已经无法满足日益增长的数据处理需求。同时,考虑到现有机房的设施老化及潜在的安全隐患,XX公司决定进行机房搬迁。本次搬迁旨在确保业务连续性、数据安全性以及新机房的高效运营。 二…...

推动科技创新润德生物邀您到场参观2024第13届生物发酵展

参展企业介绍 山东润德生物科技有限公司成立于2014年10月17日,是一家围绕生物制品的研发、生产、营销、国际贸易、技术服务为核心业务的国家高新技术企业,近年来荣获国家制造业单项冠军示范企业、国家级绿色工厂、国家知识产权优势企业、国家工业产品绿…...

如何在JavaScript中提高性能

在JavaScript中提高性能是一个涉及多个方面的任务,包括代码优化、数据结构选择、异步编程、避免全局查找、内存管理等。以下是一些关键的策略和技巧,可以帮助你提高JavaScript代码的性能: 1. 优化循环 使用for循环代替forEach,特…...

外观模式(面子模式)

外观模式 文章目录 外观模式什么是外观模式示例 什么是外观模式 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 Facade 外观类 知道哪些子系统类负责处理请求,将客…...

蓝桥杯考前复习三

1.约数个数 由乘法原理可以得出&#xff1a; import java.util.*; public class Main{static int mod (int)1e9 7;public static void main(String[] args){Map<Integer,Integer> map new HashMap<>(); //创建一个哈希表Scanner scan new Scanner(System.in);i…...

极客时间: 用 Word2Vec, LangChain, Gemma 模拟全本地检索增强生成(RAG)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

VBA操作Word

检查word中的字体情况 Sub ListAllFontsInDocument()Dim doc As DocumentDim rng As RangeDim char As RangeDim fontName As StringDim uniqueFonts As Collection 初始化集合用于存储唯一字体名称Set uniqueFonts New Collection 获取当前活动文档Set doc ActiveDocument …...

Linux文件IO(4):目录操作和文件属性获取

目录 1. 前言 2. 函数介绍 2.1 访问目录 – opendir 2.2 访问目录 – readdir 2.3 访问目录 – closedir 2.4 修改文件访问权限 – chmod/fchmod 2.5 获取文件属性 – stat/lstat/fstat 2.5.1 文件属性 – struct stat 2.6 文件类型 – st_mode 3. 代码练习 3.1 要求 3.2 代…...

【C语言】_文件类型,结束判定与文件缓冲区

目录 1. 文本文件和二进制文件 2. 文件读取结束的判定 3. 文件缓冲区 1. 文本文件和二进制文件 根据数据的组织形式&#xff0c;数据文件被称为文本文件或二进制文件&#xff1b; 数据在内存中以二进制的形式存储&#xff0c;如果不加转换地输出到外存&#xff0c;就是二进…...

YOLOV8注意力改进方法:DoubleAttention(附代码)

原论文地址&#xff1a;原论文地址 DoubleAttention网络结构的优点在于&#xff0c;它能够有效地捕获图像中不同位置和不同特征的重要性&#xff0c;从而提高了图像识别和分割的性能。 论文相关内容介绍&#xff1a; 论文摘要&#xff1a;学习捕捉远程关系是图像/视频识别的…...

每日一题 --- 前 K 个高频元素[力扣][Go]

前 K 个高频元素 题目&#xff1a;347. 前 K 个高频元素 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输入: nums [1,1,1,2,2,3], k 2 输出: [1,2]示例 2: 输入: nums [1], k 1 输出: …...

Rust所有权和Move关键字使用和含义讲解,以及Arc和Mutex使用

Rust 所有权规则 一个值只能被一个变量所拥有&#xff0c;这个变量被称为所有者。 一个值同一时刻只能有一个所有者&#xff0c;也就是说不能有两个变量拥有相同的值。所以对应变量赋值、参数传递、函数返回等行为&#xff0c;旧的所有者会把值的所有权转移给新的所有者&#…...

【YOLOV5 入门】——构建自己的数据集模型训练模型检验

一、准备工作 1、数据收集 图片类型数据不用多说&#xff1b;视频类型数据利用opencv进行抽帧保存为一张张图片&#xff0c;这里选取30s的名侦探柯南片段进行试验&#xff0c;确保环境解释器下安装了opencv&#xff08;我使用的是另一个虚拟环境&#xff09;&#xff1a; im…...

MacBook 访达使用技巧【mac 入门】

快捷键 打开访达搜索窗口默认快捷键【⌥ ⌘ 空格键】可以在键盘【系统偏好设置 -> 键盘->快捷键->聚焦】修改 但是我不会去修改它&#xff0c;因为我不常用访达的搜索窗口&#xff0c;更多的是想快速打开访达文件夹窗口&#xff0c;可以通过第三方软件定义访达的快…...

常见溯源,反溯源,判断蜜罐手段

常见溯源&#xff0c;反溯源&#xff0c;判断蜜罐手段 1.溯源手段2.反溯源手段3.如何判断蜜罐&#x1f36f;4.案例&#xff1a;MySQL读文件蜜罐 1.溯源手段 IP地址追踪&#xff1a;通过IP地址追踪可以确定攻击者的地理位置和ISP信息等&#xff1b;通过攻击IP历史解析记录/域名…...

蓝桥杯刷题-09-三国游戏-贪心⭐⭐⭐

蓝桥杯2023年第十四届省赛真题-三国游戏 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件&#xff0c;每个事件之间相互独立且最多只会发生一次&#xff0c;当第 i 个事件发生时会分别让 X, Y,…...

家长选择赶考小状元AI自习室还是其他品牌对孩子学习更有帮助?深度解析三大维度

随着教育智能化浪潮席卷而来&#xff0c;家长们在为孩子选择学习辅助工具时&#xff0c;面临着前所未有的多元选择。传统网课、新兴自习室品牌层出不穷&#xff0c;而深耕智能教育领域二十年的赶考小状元AI智能自习室&#xff0c;以其独特的“教育内核科技工具运营支持”三维融…...

W5500 TCP客户端实战:从寄存器配置到网络调试助手,一步步打通你的第一个物联网连接

W5500 TCP客户端实战&#xff1a;从寄存器配置到网络调试助手&#xff0c;一步步打通你的第一个物联网连接 在嵌入式物联网开发中&#xff0c;网络通信模块的选择往往决定了项目的稳定性和开发效率。W5500作为一款全硬件TCP/IP协议栈芯片&#xff0c;以其稳定的性能和简单的开发…...

减肥成功的人,都有这 4 个共同点

减肥成功的人&#xff0c;都有这 4 个共同点 为什么你总是减肥失败&#xff0c;而有的人却轻松瘦下来不反弹&#xff1f; 今天告诉你真相 &#x1f447; 01&#xff5c; 吃够基础代谢值 ❌ 极端节食 → 代谢下降 → 越减越肥 ✅ 男生 ≥1400 大卡&#xff0c;女生 ≥1100 大卡 …...

GD32C103RBT6 I2C 驱动全解析

一、I2C 通信基础概述 1. I2C 硬件接口 GD32C10x 提供 I2C0、I2C1 两组硬件 I2C: SCL:串行时钟线(由主机产生) SDA:串行数据线 需外接 上拉电阻(4.7kΩ 经典值) 支持 多主机、多从机 2. 通信模式 主机模式:MCU 主动发起通信(最常用) 从机模式:MCU 被其他主机访问 …...

别再傻傻分不清了!给硬件工程师的SI、PI、EMI关系速查手册(附高频PCB设计实例)

硬件工程师实战指南&#xff1a;SI、PI、EMI的三角关系与高频PCB设计避坑 当你第一次面对DDR4布线导致的EMI测试失败时&#xff0c;可能会陷入这样的困惑&#xff1a;明明是信号完整性问题&#xff0c;为什么整改方案却是调整电源层的去耦电容&#xff1f;这种看似跨领域的因果…...

告别ICMP被墙!用TCP Traceroute精准探测服务器网络路径(附Win/Mac/Linux三平台保姆级教程)

告别传统路径探测&#xff1a;TCP Traceroute的跨平台实战指南 当服务器访问异常时&#xff0c;传统ICMP traceroute往往在第一个防火墙处就戛然而止。想象一下&#xff0c;你正面临生产环境突发性网络延迟&#xff0c;而常规工具返回的只有一串令人沮丧的"***"——此…...

WindowResizer:打破Windows窗口尺寸限制的终极方案

WindowResizer&#xff1a;打破Windows窗口尺寸限制的终极方案 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 在Windows日常使用中&#xff0c;你是否曾对某些应用程序的窗口尺寸…...

epub_to_audiobook开发者指南:如何扩展新的TTS提供商

epub_to_audiobook开发者指南&#xff1a;如何扩展新的TTS提供商 【免费下载链接】epub_to_audiobook EPUB to audiobook converter, optimized for Audiobookshelf, WebUI included 项目地址: https://gitcode.com/gh_mirrors/ep/epub_to_audiobook 想要为epub_to_audi…...

如何快速提升Windows性能:终极系统优化完整指南

如何快速提升Windows性能&#xff1a;终极系统优化完整指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN …...

华为昇腾PTO指令集优化SSA架构Gather操作

华为昇腾的PTO&#xff08;Pipeline Tensor Operations&#xff09;指令集通过其异构流水线、内存层次优化和软硬件协同设计&#xff0c;为优化亚二次注意力&#xff08;SSA&#xff09;架构中的不规则Gather&#xff08;聚集&#xff09;操作提供了系统性的解决方案。这些优化…...