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

java_base_(抽象类与接口区别篇)

我相信大家面对什么时候用抽象类,什么时候用接口会犯糊涂甚至手足无措。那么下面我将结合原神场景介绍一下它们各自的区别和特点,让你更了解何时用抽象类和接口。

一、先明确核心:抽象类与接口到底是什么?

在讲区别前,我们先给两者一个 “原神式定义”,先建立直观认知

1. 抽象类(Abstract Class):原神的 “基础角色模板”

核心定位:既有共性实现,又有强制规则的“半成品模板”。

原神类比:米哈游设计“神之眼持有者”的基础模板-----所有神之眼持有者都有“元素属性”(比如火,水),“基础攻击”(平A),“元素能量”(赞大招)这些共性属性/行为;但每个角色的“元素战技(E)”“元素爆发(Q)”效果不同,需要具体角色自己实现。

抽象类特征:可以包含“具体方法(比如基础攻击的通用逻辑)”和“抽象方法”(比如必须重写的元素战技),不能直接实例化(不能直接创建“神之眼持有者”角色,只能创建胡桃,行秋等具体角色)

2. 接口(Interface):原神的 “特殊技能资质”

核心定位:只有强制规则,没有任何实现的“能力契约”。

原神类比:原神中---“护盾角色”,“治疗角色”,“增伤角色”。任何角色只要满足条件,都能拥有这个能力(实现接口),但能力本身不提供具体效果,需要角色自己实现(比如钟离的护盾,迪奥娜都是套盾,但是他们的效果不同)

接口的特性:只能包含“抽象方法”(Java8后可加默认方法,但核心是规则约束),不能包含属性(Java11后可以加静态常量),类可以实现多个接口(一个角色可以有多个能力)。

二,结合原神场景我们用代码展现一下抽象类的具体用法

一、抽象类的具体用法(原神场景落地)

1. 定义抽象类:神之眼持有者基础模板

2. 子类继承抽象类:具体角色实现

3. 抽象类的价值体现

复用代码:normalAttack()、gainEnergy() 这些所有角色都有的逻辑,只写一次,子类直接用;
强制规则:所有子类必须实现 elementalSkill() 和 elementalBurst(),保证 “所有神之眼持有者都有 E/Q 技能”,不会出现 “没有 E 技能的角色”;
统一属性:所有角色都有 name、element 等属性,结构统一,便于维护。

二、接口的具体用法(原神场景落地)

1. 定义接口:特殊技能

2. 类实现接口:角色获得特殊能力

3. 接口的价值体现

多实现扩展:钟离同时拥有 “护盾” 和 “减抗” 能力,迪奥娜同时拥有 “护盾” 和 “治疗” 能力,一个角色可以有多个资质;
规则约束:只要实现ShieldProvider接口,就必须有createShield()方法,保证 “所有护盾师都能生成护盾”;
解耦灵活:如果后续新增 “增伤师” 资质,只需定义DamageBooster接口,让需要的角色实现即可,不影响原有代码。

三、抽象类与接口的综合应用(原神完整技能体系)

创建一个队伍逻辑,将角色特殊技能,和通用技能组织起来

运行结果(直观体现两者价值)

三、新手必看:什么时候用抽象类?什么时候用接口?

合原神场景,给你一个 “一句话判断准则”,再也不纠结:

用抽象类的场景(满足任意一条即可)
  1. 你需要定义一个 “基础模板”,包含多个子类的共性属性和具体方法(比如所有神之眼持有者都有平 A、元素能量);
  2. 你需要强制子类实现某些方法(比如所有神之眼持有者必须有 E/Q 技能);
  3. 子类与父类是 “is-a” 关系(比如 “胡桃 is-a 神之眼持有者”)。
用接口的场景(满足任意一条即可)
  1. 你需要定义一个 “特殊能力”,多个不相关的类都可能拥有(比如 “护盾能力”,钟离、行秋、迪奥娜都有,但它们是不同元素、不同定位的角色);
  2. 你需要给一个类扩展多个独立的能力(比如钟离同时有护盾、减抗能力);
  3. 类与接口是 “has-a” 关系(比如 “钟离 has-a 护盾能力”)。
绝对不用抽象类 / 接口的场景
  1. 不要用抽象类定义 “纯规则”(比如只有抽象方法,没有具体方法和属性)—— 改用接口;
  2. 不要用接口定义 “基础模板”(比如需要包含大量共性属性和具体方法)—— 改用抽象类;
  3. 不要为了 “多继承” 而滥用接口(比如一个类实现 10 个接口,每个接口只有一个方法)—— 考虑是否设计过度。

总结:抽象类与接口的核心差异一句话记

  • 抽象类:“我是你的爸爸,我给你一套基础装备,你必须学会我的独门绝技”(复用 + 强制);
  • 接口:“我是你的资质证书,你只要通过考核(实现方法),就能拥有这个能力,还能考多个证书”(扩展 + 灵活)。

在原神中,抽象类是 “神之眼持有者的基础模板”,保证了所有角色的统一性;接口是 “特殊技能资质”,让角色的能力组合更灵活。两者结合,既实现了代码复用,又保证了系统的扩展性 —— 这也是面向对象编程的核心思想。

ok,如果各位观众老爷觉得我讲的还不错,请给我留下一个小小的赞吧!🌂Q!

http://www.jsqmd.com/news/107689/

相关文章:

  • 网安人狂喜!红利期 5-8 年 + 480 万缺口,现在转行直接踩中风口
  • python大数据的基于k-means算法的校园美食推荐系统_j4eg7g7z--论文
  • 百度网盘解析工具技术解析与高速下载实现方案
  • 【直接抄作业】程序员技术变现新思路:漏洞挖掘私活接单经验全分享
  • Wallpaper Engine壁纸下载器:一键获取创意工坊海量资源
  • Pyuthon的CBA篮球球员数据可视化分析系统的设计与实现_q0o7rs84_论文
  • 魔兽争霸III兼容性修复终极方案:让经典游戏重获新生
  • 百度网盘高速下载神器:告别限速的终极解决方案
  • 挖到宝了!从 Java 到网安:计算机人 2025 自救路线,年薪 40-150 万不是梦
  • Flutter Engine长文本渲染优化:从卡顿到流畅的实战指南
  • ISO 26262功能安全标准:汽车电子系统安全开发完整指南
  • 开发转渗透工程师:技能复用 + 薪资暴涨,这是我做的最对的决定
  • EPubBuilder:零基础也能快速上手的电子书制作神器 ✨
  • 2025终极JUCE音频开发实战:从新手到专家的完整成长路径
  • EmotiVoice开源项目依赖项管理最佳实践
  • 终极智能设备管理平台:ThingsGateway完整指南
  • 终极百度贴吧用户体验优化指南:15个实用脚本免费提升你的贴吧体验
  • scrapy-python基于大数据爬虫技术的B站数据分析可视化系统_8dbm860u--论文python springboot 转
  • 鼠标性能测试终极指南:从新手到专家的完整解决方案
  • 如何用WebRL技术实现浏览器自动化:5个快速提升效率的终极技巧
  • 语聊APP新生态!一站式语聊房语音直播APP源码开发搭建
  • 智能代码生成终极指南:7步实现自动化开发效率翻倍
  • GKD手机自动化操作完全指南:让手机更懂你的需求
  • G-Helper华硕优化工具:3分钟快速配置,性能调优秘诀全解析
  • 容器镜像优化终极指南:SLIM工具完整教程与实战解析
  • 找最大公约数
  • 塑社交体验:语音社交从基础功能到沉浸式升级的技术解析
  • Qwen3-235B-A22B-MLX-8bit:革命性大语言模型的智能进化之路
  • Mermaid在线编辑器终极指南:从零开始轻松制作专业图表
  • Flutter Engine音频可视化实战攻略:从频谱分析到波形绘制的完整方案