news 2026/5/8 3:22:15

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/8 3:21:49

开源游戏宝库终极指南:awesome-open-source-games

开源游戏宝库终极指南:awesome-open-source-games 【免费下载链接】awesome-open-source-games Collection of Games that have the source code available on GitHub 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-open-source-games awesome-open-…

作者头像 李华
网站建设 2026/5/4 14:31:22

【C++】--红黑树的概念和实现

前言:在计算机科学的浩瀚领域中,数据结构是构建高效算法的基石,而树结构因其出色的层次性和查找效率,成为处理动态数据集合的核心选择。二叉搜索树作为基础的树结构,虽能实现快速的插入、删除与查找操作,但…

作者头像 李华
网站建设 2026/5/7 17:51:14

如何用WebRL技术实现浏览器自动化:5个快速提升效率的终极技巧

在数字化办公时代,浏览器操作占据了日常工作的大量时间。现在,借助智谱AI开源的WebRL-Llama-3.1-8B模型,任何人都可以轻松实现网页操作的智能化自动化。本文将为你揭示5个简单易学的技巧,让你的浏览器操作效率提升数倍。 【免费下…

作者头像 李华
网站建设 2026/5/2 13:20:42

ISO 26262功能安全标准:汽车电子系统安全开发完整指南

ISO 26262功能安全标准:汽车电子系统安全开发完整指南 【免费下载链接】ISO26262中文版本PDF下载分享 ISO 26262 中文版本 PDF 下载 项目地址: https://gitcode.com/Open-source-documentation-tutorial/442c6 ISO 26262标准是汽车电子系统功能安全领域的权威…

作者头像 李华
网站建设 2026/5/7 13:48:01

快速上手EPubBuilder:5分钟创建专业EPUB电子书

EPubBuilder是一款功能强大的在线EPUB电子书编辑器,让作者和内容制作者能够轻松创建和编辑电子书内容。这个开源项目采用HTML、CSS和JavaScript技术栈,提供了完整的EPUB格式支持,无需安装任何软件即可在浏览器中完成整个电子书制作流程。 【免…

作者头像 李华