JAVA系列 小白入门参考资料 接口
目录
接口
接口的概念
语法
接口使用
接口实现用例
接口特性
实现多个接口和实现用例
接口间的继承
接口
接口的概念
在 Java 中,接口可以看成是:多个类的公共规范,是一种引用数据类型。
语法
接口在语法上和类相似
public interface 接口名称 {
......
}
提示: 创建接口时, 接口的命名一般以大写字母 I 开头
接口使用
接口不能直接使用,必须要有一个"实现类"来"实现"该接口,并实现接口中的所有抽象方法。
public class 类名称 implements 接口名称 {
...
}
注意:子类和父类之间是extends 继承关系,类与接口之间是 implements 实现关系。
接口实现用例
USB接口 笔记本类 鼠标类 键盘类
//USB接口
public interface USB {//方法,打开设备,关闭设备void openEquipment();void stopEquipment();
}//定义鼠标类,使用接口
class Mouse implements USB {//使用接口,就要重写USB接口的抽象方法@Overridepublic void openEquipment() {System.out.println("使用鼠标");}//自定义一个鼠标点击的功能public void click(){System.out.println("鼠标点击");}@Overridepublic void stopEquipment() {System.out.println("关闭鼠标");}
}//定义键盘类,使用接口
class Keyboard implements USB{@Overridepublic void openEquipment() {System.out.println("使用键盘");}//自定义一个键盘输入的方法public void inPut() {System.out.println("键盘输入");}@Overridepublic void stopEquipment() {System.out.println("关闭键盘");}
}
//定义电脑类,使用设备
class Computer{public void powerOn(){System.out.println("打开电源");}public void useEquipment(USB usb){//这里使用USB usb的原因是:为了传参并发生向上转型usb.openEquipment();//这里会发生动态绑定//这里,我们调用了使用设备的方法,但我们有鼠标和键盘,他们都要各自特有的方法click和inPut//但usb是接口类型,直接用usb去调用他们的特有方法,不可行//区分 引用的是谁的对象if(usb instanceof Mouse){Mouse mouse = (Mouse) usb;mouse.click();}else if(usb instanceof Keyboard){Keyboard keyboard = (Keyboard) usb;keyboard.inPut();}usb.stopEquipment();}public void powerOff(){System.out.println("关闭电源");}}
class Test{public static void main(String[] args) {Computer computer = new Computer();computer.powerOn();System.out.println();computer.useEquipment(new Keyboard());System.out.println();computer.useEquipment(new Mouse());System.out.println();computer.powerOff();}
}

接口特性
- 接口类型是一种引用类型,不能直接 new 接口的对象
- 接口中的每一个方法都是默认被 public abstract 修饰
- 接口中的方法不能在接口中实现(因为抽象方法不能有具体的实现),只能由实现接口的类来实现
- 重写接口中的方法时,不能使用默认的访问权限(因为接口的方法默认是public)
- 接口中可以拥有变量,但接口中的变量会默认被public static final 修饰
- 接口中不能有静态代码块和构造方法
- 接口虽然不是类,但是接口编译完成后字节码文件的后缀格式也是.class
- 如果类没有实现接口中的所有的抽象方法,则类必须设置为抽象类
实现多个接口和实现用例
//动物类
class Animals{private String name;public Animals(String name) {this.name = name;}
}
创几个接口
//吃 接口
interface EAT{void eat();
}//跑 接口
interface RUN{void run();
}//飞 接口
interface FLY{void fly();
}//游泳 接口
interface SWIM{void swim();
}
创几个具体的动物类
小狗,可以吃和跑
class Dog extends Animals implements EAT,RUN{public Dog(String name) {super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}
}
小鱼,可以吃和游
class Fish extends Animals implements EAT,SWIM{public Fish(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void swim() {System.out.println(this.name + "在游");}
}
小鸭子,可以吃,飞,跑和游
class Duck extends Animals implements EAT,RUN,FLY,SWIM{public Duck(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}@Overridepublic void fly() {System.out.println(this.name + "在飞");}@Overridepublic void swim() {}
}
上面的代码展示了 Java 面向对象编程中最常见的用法: 一个类继承一个父类, 同时实现多种接口
继承表达的含义是 is - a 语义, 而接口表达的含义是 具有 xxx 特性
以下是完整代码和执行结果
class Animals{public String name;public Animals(String name) {this.name = name;}
}//吃 接口
interface EAT{void eat();
}//跑 接口
interface RUN{void run();
}//飞 接口
interface FLY{void fly();
}//游泳 接口
interface SWIM{void swim();
}class Dog extends Animals implements EAT,RUN{public Dog(String name) {super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}
}class Fish extends Animals implements EAT,SWIM{public Fish(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void swim() {System.out.println(this.name + "在游");}
}class Duck extends Animals implements EAT,RUN,FLY,SWIM{public Duck(String name){super(name);}@Overridepublic void eat() {System.out.println(this.name + "在吃");}@Overridepublic void run() {System.out.println(this.name + "在跑");}@Overridepublic void fly() {System.out.println(this.name + "在飞");}@Overridepublic void swim() {}
}public class Blog {public static void main(String[] args) {Dog dog = new Dog("小狗");dog.eat();dog.run();Fish fish = new Fish("小鱼");fish.eat();fish.swim();Duck duck = new Duck("小鸭子");duck.eat();duck.fly();duck.run();duck.swim();}}

接口间的继承
interface RUN{void run();
}//游泳 接口
interface SWIM{void swim();
}interface ICanDo extends RUN, SWIM {
}class Frog implements ICanDo {...
}
通过接口继承创建一个新的接口 ICanDo 表示 "两栖的". 此时实现接口创建的 Frog 类, 就继续要实现 run 方法, 也需要实现 swim 方法.
接口间的继承相当于把多个接口合并在一起
相关文章:
JAVA系列 小白入门参考资料 接口
目录 接口 接口的概念 语法 接口使用 接口实现用例 接口特性 实现多个接口和实现用例 接口间的继承 接口 接口的概念 在现实生活中,接口的例子比比皆是,比如:笔记本上的 USB 口,电源插座等。 电脑的 USB 口上&am…...
日报表定时任务优化历程
报表需求背景 报表是一个很常见的需求,在项目中后期往往会需要加多种维度的一些统计信息,今天就来谈谈上线近10个月后的一次报表优化优化之路(从一天报表跑需要五分钟,优化至秒级) 需求:对代理商进行日统计…...
excel表格里,可以把百分号放在数字前面吗?
在有些版本里是可以的,这样做: 选中数据,鼠标右键,点击设置单元格格式,切换到自定义,在右侧栏输入%0,点击确定就可以了。 这样设置的好处是,它仍旧是数值,并且数值大小没…...
应用案例 | 商业电气承包商借助Softing NetXpert XG2节省网络验证时间
一家提供全方位服务的电气承包商通过使用Softing NetXpert XG2顺利完成了此次工作任务——简化了故障排查的同时,还在很大程度上减少了不必要的售后回访。 对已经安装好的光纤或铜缆以太网网络进行认证测试可能会面临不同的挑战,这具体取决于网络的规模、…...
【JAVA语言-第20话】多线程详细解析(二)——线程安全,非线程安全的集合转换成线程安全
目录 线程安全 1.1 概述 1.2 案例分析 1.3 解决线程安全问题 1.3.1 使用synchronized关键字 1.3.1.1 同步代码块 1.3.1.2 同步方法 1.3.2 使用Lock锁 1.3.2.1 概述 代码示例: 1.4 线程安全的类 1.4.1 非线程安全集合转换成线程安全集合 1.5 总结 …...
区块链中的加密算法及其作用
区块链技术以其去中心化、不可篡改、透明公开的特性,在全球范围内引发了广泛的关注和讨论。其中,加密算法作为区块链技术的核心组成部分,对于维护区块链网络的安全、确保数据的完整性和真实性起到了至关重要的作用。本文将详细介绍区块链中常…...
微信小程序跳转微信管理平台配置的客服及意见页面
<button open-type"contact" bindcontact"handleContact" session-from"sessionFrom">帮助与客服</button> 不需要路径 在当前小程序中会自动进入 open-type"contact" 其他参数不用修改 只修改这个参数对应表单组件 /…...
灌溉机器人 状压dp
灌溉机器人 题目描述 农田灌溉是一项十分费体力的农活,特别是大型的农田。小明想为农民伯伯们减轻农作负担,最近在研究一款高科技——灌溉机器人。它可以在远程电脑控制下,给农田里的作物进行灌溉。 现在有一片 N 行 M 列的农田。农田的土…...
用于接收参数的几个注解
了解四种主要请求方法的传参格式 GET方法: 参数通常通过URL的查询字符串(query string)传递,形式为key1value1&key2value2。示例:http://example.com/api/resource?key1value1&key2value2 POST方法…...
Flask-Login 实现用户认证
Flask-Login 实现用户认证 Flask-Login 是什么 Flask-Login 是 Flask 中的一个第三方库,用于处理用户认证和管理用户会话,它提供了一组工具和功能,使得在 Flask 应用程序中实现用户认证变得更加简单和方便。 如何使用 Flask-Login 1.安装…...
基于WPF的DynamicDataDisplay曲线显示
一、DynamicDataDisplay下载和引用 1.新建项目,下载DynamicDataDisplay引用: 如下图: 二、前端开发: <Border Grid.Row"0" Grid.Column"2" BorderBrush"Purple" BorderThickness"1"…...
股票问题(至多两次购买
class Solution {public int maxProfit(int[] prices) {int[] dpnew int[4];dp[0]-prices[0];//第一次持有dp[1]0;dp[2]-prices[0];//第二次持有dp[3]0;for(int i1;i<prices.length;i){dp[0]Math.max(dp[0],-prices[i]);dp[1]Math.max(dp[1],dp[0]prices[i]);dp[2]Math.max(…...
车辆运动模型中LQR代码实现
一、前言 最近看到关于架构和算法两者关系的一个描述,我觉得非常认同,分享给大家。 1、好架构起到两个作用:合理的分解功能、合理的适配算法; 2、好的架构是好的功能的必要条件,不是充分条件,一味追求架构…...
Springboot集成feign远程调用
需求:在leadnews-wemedia微服务里需要调用leadnews-article微服务的接口。新建一个支持feign调用的名为heima-leadnews-feign-api的模块 heima-leadnews-feign-api的pom文件里导入openfeign依赖 <dependency><groupId>org.springframework.cloud</g…...
构建NFS远程共享存储
nfs-server:10.1.59.237 nfs-web:10..159.218 centos7,服务端和客户端都关闭防火墙和selinux内核防火墙,如果公司要求开启防火墙,那需要放行几个端口 firewall-cmd --add-port2049/tcp --permanent firewall-cmd --add-port111/tcp --permanent firew…...
X9C103SIZT1 数字电位计 IC 10K SOIC-8 参数 应用案例
X9C103SIZT1 是一款数字电位器,属于 X9C103 系列。它是一款100抽头的非易失性数字电位器,阻值为 10 kOhm,封装形式为 SOIC-8。这款器件常用于需要调整电子设备阻值的应用中,如音频设备、电源管理以及传感器校准等。 X9C103SIZT1 的…...
redis深入理解之数据存储
1、redis为什么快 1)Redis是单线程执行,在执行时顺序执行 redis单线程主要是指Redis的网络IO和键值对读写是由一个线程来完成的,Redis在处理客户端的请求时包括获取(socket 读)、解析、执行、内容返回 (socket 写)等都由一个顺序串行的主线…...
用20行python写一个最简单的网站
先安装flask框架,cmd命令行 pip install flask,或pycharm -> setting -> project -> python interpreter 搜索安装 # 引入Flask框架 from flask import Flask# 实例化Flask应用 app Flask(__name__)# 定义一个路由,当用户访问网站…...
零基础入门篇①③ Python可变序列类型--列表
Python从入门到精通系列专栏面向零基础以及需要进阶的读者倾心打造,9.9元订阅即可享受付费专栏权益,一个专栏带你吃透Python,专栏分为零基础入门篇、模块篇、网络爬虫篇、Web开发篇、办公自动化篇、数据分析篇…学习不断,持续更新,火热订阅中🔥专栏限时一个月(5.8~6.8)重…...
微服务项目 - SpringBoot 2.x 升级到 SpringBoot 3.2.5,保姆级避坑
目录 一、前言 二、取经之路 2.1、依赖版本情况 2.2、MyBatis-Plus 依赖改变...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
