news 2026/4/24 22:11:45

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/4/22 21:08:26

Flutter Engine长文本渲染优化:从卡顿到流畅的实战指南

你是否曾遇到过Flutter应用在渲染长篇对话记录或电子书时出现明显卡顿?当文本内容超过10万字,应用首屏加载缓慢,滑动体验更是令人沮丧。Flutter Engine通过其先进的渲染架构,为长文本场景提供了完整的性能优化方案,让海…

作者头像 李华
网站建设 2026/4/22 3:47:20

2025终极JUCE音频开发实战:从新手到专家的完整成长路径

2025终极JUCE音频开发实战:从新手到专家的完整成长路径 【免费下载链接】JUCE 项目地址: https://gitcode.com/gh_mirrors/juc/JUCE JUCE(Jules Utility Class Extensions)作为业界领先的跨平台C音频应用框架,为开发者提供…

作者头像 李华
网站建设 2026/4/20 6:13:36

实战精通CPUID指令:5个场景掌握处理器信息获取核心技术

实战精通CPUID指令:5个场景掌握处理器信息获取核心技术 【免费下载链接】linux-insides-zh Linux 内核揭秘 项目地址: https://gitcode.com/gh_mirrors/lin/linux-insides-zh 在Linux系统开发中,你是否曾困惑如何准确识别处理器特性、优化代码性能…

作者头像 李华
网站建设 2026/4/17 17:10:57

革命性Rust跨平台性能测试方案:企业级多架构性能基准实践

革命性Rust跨平台性能测试方案:企业级多架构性能基准实践 【免费下载链接】cross “Zero setup” cross compilation and “cross testing” of Rust crates 项目地址: https://gitcode.com/gh_mirrors/cro/cross 在当今多架构并行的技术环境中,R…

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

洛谷 P10468 兔子与兔子

题目描述很久很久以前,森林里住着一群兔子。有一天,兔子们想要研究自己的 DNA 序列。我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DNA 序列可能包含 26 个小写英文字母)。然后我们每次选择两个区间&#xf…

作者头像 李华
网站建设 2026/4/21 23:36:16

终极智能设备管理平台:ThingsGateway完整指南

终极智能设备管理平台:ThingsGateway完整指南 【免费下载链接】ThingsGateway ThingsGateway 是基于Net6/7/8的跨平台边缘采集网关,提供底层PLC通讯库,通讯调试软件等。 项目地址: https://gitcode.com/gh_mirrors/th/ThingsGateway 在…

作者头像 李华