news 2026/8/14 3:13:56

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/8/13 3:03:40

词库转换终极指南:轻松实现20+输入法无缝迁移

词库转换终极指南:轻松实现20输入法无缝迁移 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 在数字化时代,输入法已经成为我们日常生活和工作…

作者头像 李华
网站建设 2026/8/12 16:50:41

Linux 终端下的 My Sql 常用操作指南(替代 Navicat)

本文演示在 Linux 服务器 上,通过 MySQL 命令行 完成日常在 Navicat 中最常用的数据库操作。适合新手,命令简洁,并附带中文注释。一、登录 MySQLmysql -u root -p-u root:指定登录用户-p:提示输入密码(更安…

作者头像 李华
网站建设 2026/8/13 22:51:03

GLM-4.5-FP8终极指南:3550亿参数MoE大模型快速部署与实战应用

GLM-4.5-FP8终极指南:3550亿参数MoE大模型快速部署与实战应用 【免费下载链接】GLM-4.5-FP8 项目地址: https://ai.gitcode.com/zai-org/GLM-4.5-FP8 智谱AI最新开源的GLM-4.5-FP8大语言模型,以3550亿总参数和创新的混合专家(MoE&…

作者头像 李华
网站建设 2026/8/13 15:58:49

JSLint:提升JavaScript代码质量的智能工具

JSLint:提升JavaScript代码质量的智能工具 【免费下载链接】jslint JSLint, The JavaScript Code Quality and Coverage Tool 项目地址: https://gitcode.com/gh_mirrors/js/jslint 还在为JavaScript代码中的潜在问题而烦恼吗?JSLint正是你需要的…

作者头像 李华
网站建设 2026/8/13 2:33:06

Syncthing Tray:5个让你爱上无服务器文件同步的理由

Syncthing Tray:5个让你爱上无服务器文件同步的理由 【免费下载链接】syncthingtray Tray application and Dolphin/Plasma integration for Syncthing 项目地址: https://gitcode.com/gh_mirrors/sy/syncthingtray 想要摆脱云存储的束缚,又担心复…

作者头像 李华