优雅的使用abstract

Unity C#面向对象设计:abstract、virtual、override核心策略与实战应用 面向对象编程(OOP)是构建可维护、可扩展软件系统的基石,其核心机制如继承、多态通过抽象类、虚方法等关键字实现。理解abstract、virtual、override的差异与适用场景,是提升代码设计能力的关键。abstract用于定义强制契约,要求子类必须实现特定行为;virtual提供可修改的默认实现,允许子类按需扩展或覆盖;override则是履行契约或进行定制化的具体手段。这些机制共同支撑了多态性,使得程序能够基于基类接口操作不同子类对象,极大地增强了代码的灵活性和复用性。在游戏开发、UI框架、数据管 阅读详情

1、abstract介绍

Java的abstract关键字可以修饰方法,也可以直接修饰类。当我们父类不关心某个方法具体实现时,可以使用abstract修饰该方法,使其成为虚方法。虚方法没有方法体,不需要实现,只需要声明即可。包含虚方法的类称为虚类,虚类也必须使用abstract关键字修饰。虚类除了不可以直接实例化,几乎和普通类没什么区别。继承虚类的子类,必须通过复写实现父类所有的虚方法,或者实现父类部分虚方法同时将自己也声明为虚类。接口(Interface)可以看作一个纯虚类,其所有方法默认都使用public abstract修饰,都是虚方法,其所有成员变量都默认都使用public final static修饰。实现(implements)接口的类,必须复写接口全部方法,否则也必须使用abstract关键字声明为虚类。

2、abstract优雅的使用姿势

假设我们有一个请求监听接口,声明了很多方法。例如:

public interface CallbackListener {

    public void start();

    public void running();

    public void end();
}

现在考虑下面这样的场景:需要为一个请求设置CallbackListener监听器,但是该请求只关心接口中的某一个方法,比如end(),该怎么做合适呢?

  • 直接实现接口全部方法
request.setCallbackListener(new CallbackListener () {

    @Override
    public void start() {
        // do not care
    }

    @Override
    public void running() {
        // do not care
    }

    @Override
    public void end() {
        // to do sth.
        ...
    }
});

这种方式,优点简单粗暴,没什么好说的,但是缺点同样很明显,接口方法越多多余的代码越多。关键是重度强迫症患者受不了啊。。。

  • 使用Adapter包装

如果你写过Android动画,肯定需要对动画执行状态进行监控,与Animator.AnimatorListener和Animator.AnimatorPauseListener接口打交道在所难免,但是如果你还在用上面那种方式设置监听器,那就太low啦。android sdk已经为我们包装好了一个AnimatorListenerAdapter类,实现了上述两个接口,复写了全部方法,但是方法体都留空。使用时,我们只需要继承AnimatorListenerAdapter,选择需要监听的状态对应的方法进行复写即可,而不用再为不关心的状态写一大堆空实现了,代码看上去会舒服很多。按照这种思路,我们可以编写一个CallbackListenerAdapter类。

public class CallbackListenerAdapter implements CallbackListener {

    @Override
    public void start() {

    }

    @Override
    public void running() {

    }

    @Override
    public void end() {

    }
}

现在,我们使用CallbackListenerAdapter设置监听就会简洁很多。

request.setCallbackListener(new CallbackListenerAdapter(){
    @Override
    public void end() {
        super.end();
    }
});

Android中其实还有很多类似的实现,比如ViewPager的SimpleOnPageChangeListener、GestureDetector的SimpleOnGestureListener等。

  • abstract Adapter

使用Adapter方式实现已经比较完美了,我们为监听器提供了默认的实现,子类只需选择相应的方法进行复写即可。但是稍微有点瑕疵:
(1)当我们在new一个Adapter时,IDE不再会像new一个虚类或者接口一样,提示需要复写的方法供我们选择,帮我们自动生成一些代码,我们需要明确知道自己应该复写哪个方法,然后去手动复写。可是,我就是很懒怎么办,代码能少敲一行也是极好的。
(2)鉴于没有IDE提示,我们可能不小心new一个Adapter默认实现就做为参数了,然而这并没有什么意义。
这时候,abstract Adapter就可以派上用场了。我们知道包含abstract method的类必须声明为abstract类,那么不包含abstract method的类可以使用abstract修饰吗?答案是肯定的,即使不包含abstract method的类也可以使用abstract修饰,abstract关键字标识着这个类是虚类,你必须至少复写它的一个方法才可以实例化。AnimatorListenerAdapter类其实就是这样实现的。利用这个原理,我们可以创建abstract Adapter,在拥有Adapter功能的同时,IDE也会为我们做代码提示,一定程度上也防止了使用默认实现作为参数。

public abstract class CallbackListenerAdapter implements CallbackListener {

    @Override
    public void start() {

    }

    @Override
    public void running() {

    }

    @Override
    public void end() {

    }
}
Spring JDBC的优雅设计 - 异常封装(下) Spring JDBC 中的异常封装 在 org.springframework.jdbc.support包下面 AbstractFallbackSQLExceptionTranslator 抽象类,提供兜底策略,这就是备胎机制。如果是蘑菇君的话,每次都会在方法后面加上一段兜底,比如: if () { } else { beitai } SQLStateSQLExceptionTrans... 阅读详情

相关推荐

金蝶云星空应用开发初级考试题目汇总

摘要:本文为金蝶云星空应用开发初级考试题目汇总

2401_86113757的博客 3799

反射获取Abstract类泛型参数方法

【代码】反射获取Abstract类泛型参数方法。

umgsai的专栏 254

【域控制器EMC】域控制器EMC设计总结

汇总项目设计当中关于EMC的设计要点,主要从原理设计、Layout、结构、外设部分总结。满足要求的器件和合理的电路能降低电磁干扰;正确的布局、接地、信号路径、屏蔽等可以减少电磁辐射。结构件设计也会对EMC性能产生影响。

weixin_42098658的博客 1259

android abstract 方法,Android-->回调(interface/abstract)的用法(通俗易懂)

版权声明:欢迎转载,转载请注明出处-->http://blog.youkuaiyun.com/angcyo使用场景 小明想要问小红借10块钱,小红答应借. 但是小红很关心小明还钱,因为小红想要在小明还钱之后,去买好吃的蛋糕. 这个时候, 小红又不能时时刻刻催着小明还钱. 只能等小明还钱的时候通知小红了; 那么, 小明通知小红的这个过程, 我把它叫做 回调;上代码(Interface部分):1:首先定义个...

weixin_32000561的博客 1250

记录:N10激光雷达串口编程,将数据存进 SQLite,并进行 ROS2 - cartographer 单雷达建图

N10 系列采用 TOF(time of flight)测距原理,通过测量调制激光的发射、返回时间差来测量物体与传感器的相对距离。激光发射器发出调制脉冲激光,内部定时器开始 从t1时刻计算时间,当激光照射到目标物体后,部分能量返回,当雷达接收到返回的激光信号时,在t2时刻停止内部定时器计时,光速C,激光雷达到达物体的距离D为:经过N10系列激光雷达内嵌的信号处理单元的实时解算得到探测物体的距离值,结合高精度自适应角度测量模块输出的角度信息,可以得到量程内周围 360 度环境 的二维平面信息。

m0_74013893的博客 1096

双轴按键摇杆模块原理与嵌入式驱动实战

双轴按键摇杆是一种融合模拟量(X/Y轴)与数字量(Z轴按键)的复合型人机交互传感器,其本质基于电位器分压原理与机械开关通断特性。通过ADC采集连续电压信号并结合数字IO检测按键状态,可实现高鲁棒性的二维运动感知与触发控制。该方案技术门槛低、成本可控、兼容性强,广泛应用于智能小车、DIY游戏手柄、工业HMI及教育开发板等嵌入式场景。文中深入解析电位器线性度、KEY引脚开漏特性、ADC参考电压稳定性及软件消抖状态机等关键工程要素,为基于Arduino、STM32或ESP32平台的快速集成提供可复用的技术路径。

weixin_30995917的博客 83

java中的抽象类(abstract)

java中的抽象类

m0_69855013的博客 1229

告别Qt Creator?手把手教你用VSCode+MinGW调试QT项目(附完整launch.json配置)

本文详细介绍了如何在VSCode中配置完整的QT开发环境,特别是针对使用MinGW编译器的用户。从环境搭建到调试配置,包括生成.pro文件、Makefile,以及配置task.json和launch.json文件,帮助开发者高效调试QT项目。

weixin_27180827的博客 187

面向对象(5)abstract 抽象与多态基础

object类是所有类的父类 object类中有几个方法 toString() 返回当前对象本身的有关信息,按字符串对象返回 equals()比较两个对象是否是同一个对象 比较两个对象是否是同一个对象,是则返回true 操作符== 简单数据类型,直接比较值。如1==2 引用类型,比较两者是否为同一对象 hashCode() 返回对象的哈希代码值 生成随机的哈希值 getClass()获取当前对象所属的类信息,返回Class对象 abstract关键字创建抽象类 例如 public abstract cla

weixin_52709222的博客 304

【YOLOv11】014、YOLOv11模型导出:PyTorch到ONNX格式转换与优化

摘要:本文详细介绍了如何将PyTorch训练的YOLOv11模型高效转换为ONNX格式。重点包括:分离模型特征提取与后处理、设置动态维度、优化ONNX算子、验证转换正确性等关键步骤。作者分享了实际项目中的经验教训,如版本对齐、算子兼容性处理、后处理分离等实用技巧,并推荐使用onnx-simplifier工具优化模型。文章强调模型转换是一个需要反复调试的过程,建议保留转换记录形成知识库,以提高部署效率并避免常见错误。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 306

【IPC】ONVIF Device Manager 测试工具

介绍onvif 协议测试工具

以实战经验介绍行业知识 1961

JAVA 关于abstract 方法里参数的问题

网上查了半天也没查到关于抽象方法里有参数怎么办的解决方案。 今天编程突然冒了这么一句:“Syntax error, insert "... VariableDeclaratorId" to complete FormalParameter”,这让我很是不解! 一开始我是在整个abstract class最下面写的这个方法,它还很耐心地告诉我可以1:移除掉abstract,2:去掉方法体

xdzcz的专栏 1万+

越野换了逐飞的ips200pro的屏幕后代码烧录中报错: “Cannot initialize device connection” 和 “Flashing failed” ...如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1150

Vue 项目路由模式全解析:从 hash 到 history 再到 abstract

Vue Router路由模式详解:hash、history和abstract模式对比 摘要: Vue Router提供三种路由模式:hash模式利用URL哈希值实现兼容性路由,无需服务器配置,适合内部系统;history模式基于HTML5 History API生成优雅URL,需服务器配合,适合现代化Web应用;abstract模式用于非浏览器环境如SSR和原生应用。选择策略应考虑项目需求、兼容性要求和服务器能力,现代应用推荐history模式,特殊环境则需使用abstract模式。三种模式在URL格式、兼

ccc1006的博客 1129

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

如何优雅的在Spring Boot中使用Quartz

在网上看到关于Spring Boot整合Quartz的方式都看起来不是太好用,太复杂。 一般都会定义一个实现了QuartzJobBean 的任务类(这个类不会交给Spring管理)。然后给这个Job配置相应的JobDetail和Trigger。 具体操作如下: 1:定义一个任务 public class DateTimeJob extends QuartzJobBean { @Override protected void executeInternal(JobExecuti

lc 697

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Photo Abstract Editorial参数调整全攻略:照片与面板比例、抽象程度等关键设置

Photo Abstract Editorial是一款专业的照片抽象编辑工具,它能将普通照片转化为由"原照片区域+抽象记忆面板+诗意标题"组成的完整编辑作品。本文将详细介绍如何调整照片与面板比例、抽象程度等关键参数,帮助新手用户快速掌握这款工具的使用技巧。 ## 一、照片与抽象面板的自适应拼接比例调整 Photo Abstract Editorial采用上下拼接的方式呈现作品,上方为摄影区域,

gitblog_00279的博客 276

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Voxel-SLAM如何实现LiDAR-惯性BA?LidarFactor与LI_BA_Optimizer源码深度解析

Voxel-SLAM 是一个完整、精准、多场景适用的 LiDAR-惯性 SLAM 系统,其精度核心来自局部建图模块中的**滑动窗口 LiDAR-惯性束调整(LiDAR-Inertial BA)**。本文带你用不到 20 分钟读懂它的两个关键类:`LidarFactor`(LiDAR 因子)与 `LI_BA_Optimizer`(LiDAR-惯性 BA 优化器),理解体素点云残差、IMU 预积分与

gitblog_00527的博客 232

《Swift 编程语言》中文版高级运算符完全指南:位运算、溢出控制、运算符重载与结果构建器

本指南基于中文版 Apple 官方《Swift 编程语言》(TSPL)语言指南中的[高级运算符](https://link.gitcode.com/i/6f2a25d58f77ca3376545d1c581df444)一章,系统讲解 Swift 在基础运算符之外提供的高级能力:位运算符、溢出运算符、运算符优先级与结合性、为自定义类型重载运算符、声明全新运算符,以及用结果构建器编写声明式 DSL。读

gitblog_00318的博客 957

abstract抽象类

abstract可以修饰类、成员方法abstract修饰类,这个类叫抽象类,abstract修饰方法,这个方法叫抽象方法修饰符 abstract class 类名{修饰符 abstract 返回值类型 方法名(形参列表);注意事项类有的成员(成员变量、方法、构造器抽象类都可以有),仅作为一种特殊的父类,并实现抽象类中不一定有抽象方法,的类一个类继承抽象类,必须完抽象类的,否则这个类也必须定义成抽象类抽象方法没有方法体只有方法声明为了更好的支持多态(优雅写法)

m0_67357923的博客 328

Photo Abstract Editorial的设计理念:保留照片真实性,提炼视觉关系的艺术

Photo Abstract Editorial是一项创新的视觉编辑项目,它通过独特的"原照片区域+抽象记忆面板+诗意标题"结构,在保留照片真实性的同时,提炼出视觉元素间的深层关系。这种编辑方式不是简单的滤镜效果或风格迁移,而是一种对摄影作品的二次创作,让观众在欣赏原照片的同时,也能感受到抽象艺术带来的视觉冲击和思考。 ## 一、核心设计理念:真实性与抽象性的平衡 ### 1.1 照片的双重角

gitblog_00013的博客 437

如何优雅的打印日志?

一般我们程序里打印日志可以帮助我们排查问题,我们也可以通过日志,来判断接口的成功、耗时等情况,而且按照一定的日志格式来打印的话,还可以用于告警平台,可以计算接口总量、成功量、失败量、失败率、耗时等,通过短信、钉钉等通知到我们。 那么接下来,我们就来看看怎么样才能规范且优雅的打印我们的日志。 一、日志目录的设置 一般我们使用Spring来开发管理后台或者api时,都会遵循一些分层范式, api -> manager -> service -> dao,那么根据这种分层,我们考虑为我们的

蓝天之枫 2640

abstract java 修饰_Java中为什么有abstract interface 修饰类?

如果有人问你为什么有abstract interface 修饰类,答案一定是他看到的这种方式一定是反编译出来的结果。实际中abstract interface和interface修饰的类没有区别。下面就上面的问题,介绍下抽象接口的概念。在程序设计过程中,读者很可能遇到这样一种困境:设计了一个接口,但实现这个接口的子类并不需要实现接口中的全部方法,也就是说,接口中的方法过多,对于某些子类是多余的,我...

weixin_33111267的博客 163

springboot项目配合注解实现策略模式,优雅的整活

springboot项目实现策略模式,优雅永不过时

qq_25720801的博客 3482

探索Photo Abstract Editorial的核心功能:原始摄影区域与抽象记忆面板的完美融合

Photo Abstract Editorial是一款创新的摄影编辑工具,它通过独特的“原始摄影区域+抽象记忆面板”双区域设计,帮助用户将普通照片转化为兼具写实与艺术感的编辑作品。这款工具不仅仅是简单的滤镜应用,而是通过解构、选择性保留、抽象提炼和重构四个步骤,实现照片视觉元素的艺术化表达。 ## 核心功能解析:双区域设计的创新理念 ### 原始摄影区域:忠实呈现照片本质 原始摄影区域位于作

gitblog_00382的博客 938

Java优雅封装的6个段位,看看你现在处于哪一层?

封装是一种将对象的内部状态和行为隐藏起来,对外只提供一些公共接口的技术。在实际开发中,封装可以提高代码的可维护性、可复用性和安全性,减少代码的耦合度和错误率。

爱媳妇儿爱编程 1322

是什么限制了我对Graphical abstract的想象力

去年8月份我写过一篇文章:Paper中的手绘图(我不仅要我觉得,我还要知道你觉得)但是!今天在朋友圈看到了一篇文章,彻底刷新了我对graphical abstract的认识。。。Link...

刘永鑫的博客——宏基因组公众号 2690
上一篇: Weex尝鲜
下一篇: Gradle之android配置
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值