抽象类作为游戏实体基类,统一管理共性属性与行为:提供protected字段、abstract方法强制子类实现、具体方法复用逻辑;支持带参构造器供子类初始化;配合多态实现统一调度;与接口分工明确,抽象类表“是什么”,接口表“能做什么”。

在游戏开发中,抽象类常被用作实体基类,用来统一管理“角色”“敌人”“道具”等具有共性但行为各异的对象。它不直接创建实例,而是提供通用属性和强制子类实现的关键逻辑,让整个对象体系既灵活又可控。
明确实体共性,设计抽象基类
比如飞机大战里,“可移动”“有生命值”“能绘制自己”是多数游戏实体的共同特征。把这些抽出来,定义成抽象类:
- 用 protected 字段声明共享状态(如
health、x、y、speed) - 用 abstract 方法 约束子类必须实现的行为(如
update()控制逻辑更新,render(Graphics g)负责画面绘制) - 用 具体方法 提供复用功能(如
isAlive()判断存活、takeDamage(int d)统一扣血逻辑)
保留构造能力,支持子类初始化
抽象类可以有构造方法——这点很关键。子类通过 super(...) 调用它,完成基础属性赋值。例如:
- 所有实体都需要初始坐标和生命值,就在抽象基类里写一个带参数的构造器
- 子类(如
PlayerPlane或EnemyPlane)在自己的构造器中调用super(x, y, 100),避免重复初始化代码 - 构造器里还能做校验(如禁止负生命值)、触发日志或事件,提升健壮性
配合多态使用,统一调度管理
游戏主循环通常只操作抽象类型变量,不关心具体是谁:
立即学习“Java免费学习笔记(深入)”;
- 把不同实体存进
List<GameEntity>(GameEntity是你的抽象基类) - 每帧遍历列表,统一调用
entity.update()和entity.render(g) - 运行时自动执行各子类自己的实现——玩家飞机加速逻辑、敌机AI路径、子弹飞行轨迹,互不干扰
注意与接口的分工
抽象类负责“是什么”(is-a 关系),接口负责“能做什么”(can-do):
- 用抽象类表达继承结构:
EnemyPlane extends GameEntity - 用接口补充能力:比如
Explosive(可爆炸)、Collidable(参与碰撞检测),让某些子类额外实现 - 这样既保持类层级清晰,又避免抽象类膨胀,也方便后期扩展新能力



















