安卓基础(接口interface)

​1. 接口的定义与实现​

​(1) 定义接口​
// 定义一个 "动物行为" 的接口
public interface Animal {void eat();      // 抽象方法(无实现)void sleep();    // 抽象方法(无实现)// Java 8+ 默认方法(有实现)default void breathe() {System.out.println("呼吸空气");}// Java 8+ 静态方法static boolean isAnimal(Object obj) {return obj instanceof Animal;}
}
​(2) 实现接口​
// Dog 类实现 Animal 接口
public class Dog implements Animal {@Overridepublic void eat() {System.out.println("狗吃狗粮");}@Overridepublic void sleep() {System.out.println("狗在窝里睡觉");}
}
​(3) 使用接口​
Animal myDog = new Dog();
myDog.eat();    // 输出: 狗吃狗粮
myDog.breathe(); // 输出: 呼吸空气(调用默认方法)
Animal.isAnimal(myDog); // true(调用静态方法)

123


文件结构​

src/
└── com/└── example/└── workflow/├── ExecutorCallback.java├── MyCallback.java├── WorkflowExecutor.java└── Main.java

1. ExecutorCallback.java​

package com.example.workflow;// 定义回调接口,无需额外导入
public interface ExecutorCallback {void onStart();void onStepDone(String step);void onComplete();void onError(String error);
}

​2. MyCallback.java​

package com.example.workflow;// 需要导入同一包内的接口
import com.example.workflow.ExecutorCallback;public class MyCallback implements ExecutorCallback {@Overridepublic void onStart() {System.out.println("工作流开始执行!");}@Overridepublic void onStepDone(String step) {System.out.println("步骤完成: " + step);}@Overridepublic void onComplete() {System.out.println("✅ 全部执行完毕!");}@Overridepublic void onError(String error) {System.out.println("❌ 错误: " + error);}
}

​3. WorkflowExecutor.java​

package com.example.workflow;// 导入同一包内的接口
import com.example.workflow.ExecutorCallback;public class WorkflowExecutor {private ExecutorCallback callback;public void setCallback(ExecutorCallback callback) {this.callback = callback;}public void execute() {try {callback.onStart();callback.onStepDone("步骤1");Thread.sleep(1000); // 属于 java.lang,无需显式导入callback.onStepDone("步骤2");Thread.sleep(1000);callback.onComplete();} catch (InterruptedException e) {callback.onError("执行超时");}}
}

​4. Main.java​

package com.example.workflow;// 导入同一包内的类
import com.example.workflow.WorkflowExecutor;
import com.example.workflow.MyCallback;public class Main {public static void main(String[] args) {WorkflowExecutor executor = new WorkflowExecutor();executor.setCallback(new MyCallback());executor.execute();}
}

因为callback就是实例化的ExecutorCallback类了

callback.onStart() 等于 ExecutorCallback.onStart()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux0.11内存管理:相关代码

ch13_2 源码分析 boot/head.s 页表初始化: 目标:初始化分页机制,将线性地址空间映射到物理内存(前 16MB),为保护模式下的内存管理做准备。核心流程 分配页目录表和页表的物理内存空间(通过 .…

【Redis】set类型

目录 1、介绍2、底层实现【1】整数集合【2】哈希表 3、常用指令 1、介绍 Redis的set集合类型是一种无序且元素唯一的数据结构,支持高效的成员判断、集合运算和随机访问。 2、底层实现 【1】整数集合 适用场景 当集合中所有的元素都是整数,且元素数量…

web技术与nginx网站环境部署

一:web基础 1.域名和DNS 1.1域名的概念 网络是基于TCP/IP协议进行通信和连接的,每一台主机都有一个唯一的标识(固定的IP地址),用以区别在网络上成千上万个用户和计算机。网络在区分所有与之相连的网络和主机时,均采用一种唯一、通用的地址…

LeetCode【剑指offer】系列(动态规划篇)

剑指offer10-I.斐波那契数列 题目链接 题目:斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(…

JVM 内存分配策略

引言 在 Java 虚拟机(JVM)中,内存分配与垃圾回收是影响程序性能的核心机制。内存分配的高效性直接决定了对象创建的速率,而垃圾回收策略则决定了内存的利用率以及系统的稳定性。为了在复杂多变的应用场景中实现高效的内存管理&am…

【二分查找】寻找峰值(medium)

6. 寻找峰值(medium) 题⽬描述:解法⼆(⼆分查找算法):算法思路:C 算法代码:Java 算法代码: 题⽬链接:162. 寻找峰值 题⽬描述: 峰值元素是指其值…

MongoDB与PHP7的集成与优化

MongoDB与PHP7的集成与优化 引言 随着互联网技术的飞速发展,数据库技术在现代软件开发中扮演着越来越重要的角色。MongoDB作为一种流行的NoSQL数据库,以其灵活的数据模型和强大的扩展性受到众多开发者的青睐。PHP7作为当前最流行的服务器端脚本语言之一,其性能和稳定性也得…

【GIT】github中的仓库如何删除?

你可以按照以下步骤删除 GitHub 上的仓库(repository): 🚨 注意事项: ❗️删除仓库是不可恢复的操作,所有代码、issue、pull request、release 等内容都会被永久删除。 🧭 删除 GitHub 仓库步骤…

焊接机排错

焊接机 一、前定位后焊接 两个机台,①极柱定位,相机定位所有极柱点和mark点;②焊接机,相机定位mark点原理:极柱定位在成功定位到所有极柱点和mark点后,可以建立mark点和极柱点的关系。焊接机定位到mark点…

认识和使用Vuex-案例

集中管理共享的数据,易于开发和后期维护;能够高效的实现组件之间的数据共享,提高开发效率;存储在Vuex的数据是响应式的,能够实时保持页面和数据的同步; 安装Vuex依赖包 npm install vuex --save导入包 im…

LLM大模型中的基础数学工具—— 信号处理与傅里叶分析

Q51: 推导傅里叶变换 的 Parseval 定理 傅里叶变换的 Parseval 定理揭示了啥关系? Parseval 定理揭示了傅里叶变换中时域与频域的能量守恒关系,即信号在时域的总能量等于其在频域的总能量。这就好比一个物体无论从哪个角度称重,重量始终不…

对Mac文字双击或三击鼠标左键没有任何反应

目录 项目场景: 问题描述 原因分析: 解决方案: 项目场景: 在使用Mac系统的时候,使用Apple无线鼠标,双击左键能够选取某个单词或词语,三击左键能够选取某一行,(百度、…

Go语言企业级项目使用dlv调试

使用dlv调试Go语言代码 打包Go代码(禁止优化和内联(便于调试更复杂的逻辑)): go build -gcflags"all-N -l" -o xxx_api_debug.exe启动一个dlb监听可运行程序的端口: dlv --listen:2345 --headlesstrue --api-version…

Kafka命令行的使用/Spark-Streaming核心编程(二)

Kafka命令行的使用 创建topic kafka-topics.sh --create --zookeeper node01:2181,node02:2181,node03:2181 --topic test1 --partitions 3 --replication-factor 3 分区数量,副本数量,都是必须的。 数据的形式: 主题名称-分区编号。 在…

Python3:Jupyterlab 安装和配置

Python3:Jupyterlab 安装和配置 Jupyter源于Ipython Notebook项目,是使用Python(也有R、Julia、Node等其他语言的内核)进行代码演示、数据分析、机器学习、可视化、教学的非常好的工具。 最新的基于web的交互式开发环境,适用于n…

快速排序及其在Unity游戏开发中的应用

一、快速排序(Quick Sort) 快速排序是一种**分治法(Divide and Conquer)**思想的排序算法,它的基本步骤是: 选一个基准元素(pivot):通常选第一个元素、最后一个元素,或者随机一个。分区(Partition):把数组分成两部分,小于等于 pivot 的放左边,大于 pivot 的放右…

【硬核干货】SonarQube安全功能

原文链接:【硬核干货】SonarQube安全功能 关于晓数神州 晓数神州坚持以“客户为中心”的宗旨,为客户提供专业的解决方案和技术服务,构建多引擎数字化体系。 核心业务1:聚焦DevOps全栈产品,打造需求管理、项目管理、开…

修改el-select背景颜色

修改el-select背景颜色 /* 修改el-select样式--直接覆盖默认样式(推荐) */ ::v-deep .el-select .el-input__inner {background-color: #1d2b72 !important; /* 修改输入框背景色 */color: #fff; } ::v-deep .el-select .el-input__wrapper {background-…

Unity-粒子系统:萤火虫粒子特效效果及参数

萤火虫特效由两部分组成。萤火虫粒子底色粒子面片。萤火虫的旋转飞动主要由 Noise参数和Color over Lifetime模块控制。 贴图:中间实周边虚的圆,可随意自行制作 Shader:Universal Render Pipeline/2D/Sprite-Lit-Default 以下是粒子详细参…

K8S Service 原理、图例——深度好文

一、理论介绍 1.1、3W 法则 1、是什么? Service 是一种为一组功能相同的 pod 提供单一不变的接入点的资源。当 Service 存在时,它的IP地址和端口不会改变。客户端通过IP地址和端口号与 Service 建立连接,这些连接会被路由到提供该 Service 的…