news 2026/2/26 2:44:14

面向对象编程综合实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面向对象编程综合实战

目录

前言

  1. 文字版格斗游戏实现
  2. 对象数组的应用 —— 商品信息管理

前言

前文已系统讲解 Java 面向对象编程的核心特性之一:封装。本文将通过两个小型实战案例,帮助读者深化对面向对象编程思想的理解,掌握类的定义、对象实例化及方法调用的核心流程。

1. 文字版格斗游戏实现

格斗游戏中,每个角色的姓名、血量等核心属性具有唯一性,需在创建角色对象(实例化)时完成初始化。本案例核心考察类的定义能力,需构建 Role 类,包含姓名、血量、攻击力等成员变量,并定义 attack 方法实现角色的攻击行为。

定义 Role 类

java

运行

package allgame; import java.util.Random; /** * 格斗游戏角色类 * 封装角色姓名、血量、攻击力属性,提供攻击行为方法 */ public class Role { // 私有成员变量,通过get/set方法访问 private String name; // 角色姓名 private int blood; // 角色血量 private int hurt; // 角色攻击力 // 获取角色姓名 public String getName() { return name; } // 设置角色姓名 public void setName(String name) { this.name = name; } // 获取角色血量 public int getBlood() { return blood; } // 设置角色血量 public void setBlood(int blood) { this.blood = blood; } /** * 构造方法:初始化角色姓名和初始血量,攻击力随机生成(0-19) * @param name 角色姓名 * @param blood 初始血量 */ public Role(String name, int blood) { this.name = name; this.blood = blood; Random random = new Random(); this.hurt = random.nextInt(20); } /** * 攻击方法:实现对目标角色的攻击行为,扣除对应血量 * @param role 被攻击的目标角色对象 */ public void attack(Role role) { // 输出攻击信息 System.out.println(this.name + "使用升龙拳对" + role.name + "造成了" + this.hurt + "点伤害"); // 扣除目标角色血量 role.blood = role.blood - this.hurt; // 防止血量出现负值,重置为0 if (role.blood < 0) { role.blood = 0; } // 输出目标角色剩余血量 System.out.println("此时" + role.name + "的血量剩余" + role.blood + "点"); } }

测试类实现角色创建与攻击逻辑

java

运行

package allgame; /** * 格斗游戏测试类 * 实例化角色对象,模拟角色互攻直至一方血量为0 */ public class gamatest { public static void main(String[] args) { // 实例化两个角色对象,初始化姓名和初始血量 Role r1 = new Role("张三", 100); Role r2 = new Role("李四", 120); // 循环实现角色互攻,直至一方血量为0 while (true) { // 张三攻击李四 r1.attack(r2); if (r2.getBlood() > 0) { // 李四血量大于0时反击张三 r2.attack(r1); if (r1.getBlood() <= 0) { System.out.println(r1.getName() + "已阵亡,游戏结束"); break; } } else { System.out.println(r2.getName() + "已阵亡,游戏结束"); break; } } } }

运行结果示例

(注:因攻击力随机生成,结果会略有差异)

plaintext

张三使用升龙拳对李四造成了15点伤害 此时李四的血量剩余105点 李四使用升龙拳对张三造成了8点伤害 此时张三的血量剩余92点 ...... 张三使用升龙拳对李四造成了12点伤害 此时李四的血量剩余0点 李四已阵亡,游戏结束

2. 对象数组的应用 —— 商品信息管理

本案例要求定义数组存储三个商品对象,商品需封装编号、名称、价格、库存等属性,核心实现商品对象的创建、数组存储及遍历验证。

定义商品类(shangpin)

java

运行

package allgame; /** * 商品类 * 封装商品编号、名称、价格、库存属性,提供get/set方法 */ public class shangpin { private String id; // 商品编号 private String name; // 商品名称 private double price; // 商品价格 private int count; // 商品库存 /** * 构造方法:初始化商品全部属性 * @param id 商品编号 * @param name 商品名称 * @param price 商品价格 * @param count 商品库存 */ public shangpin(String id, String name, double price, int count) { this.id = id; this.name = name; this.price = price; this.count = count; } // 获取商品编号 public String getId() { return id; } // 设置商品编号 public void setId(String id) { this.id = id; } // 获取商品名称 public String getName() { return name; } // 设置商品名称 public void setName(String name) { this.name = name; } // 获取商品价格 public double getPrice() { return price; } // 设置商品价格 public void setPrice(double price) { this.price = price; } // 获取商品库存 public int getCount() { return count; } // 设置商品库存 public void setCount(int count) { this.count = count; } }

主类实现商品对象数组的创建与遍历

java

运行

package allgame; /** * 商品信息测试类 * 实现商品对象数组的创建、赋值与遍历验证 */ public class shangpintest { public static void main(String[] args) { // 1. 创建长度为3的商品对象数组 shangpin[] arr = new shangpin[3]; // 2. 实例化三个商品对象,初始化属性 shangpin t1 = new shangpin("1", "梳子", 4.55, 10); shangpin t2 = new shangpin("2", "塑料梳子", 5.55, 10); shangpin t3 = new shangpin("3", "木头梳子", 6.55, 10); // 3. 将商品对象存入数组 arr[0] = t1; arr[1] = t2; arr[2] = t3; // 4. 遍历数组,验证商品信息 for (int i = 0; i < arr.length; i++) { shangpin sp = arr[i]; System.out.println("id:" + sp.getId() + " name:" + sp.getName() + " price:" + sp.getPrice() + " count:" + sp.getCount()); } } }

运行结果

plaintext

id:1 name:梳子 price:4.55 count:10 id:2 name:塑料梳子 price:5.55 count:10 id:3 name:木头梳子 price:6.55 count:10

总结

类是 Java 面向对象编程的核心载体,其本质是对现实事物共同属性和行为的抽象封装。通过类的定义,可快速构建具有统一特征的对象模板,同时通过方法限定对象的行为边界。掌握 Java 编程的核心,需熟练掌握类的抽象与创建能力 —— 能够从业务场景中提取事物的核心属性与行为,定义出结构合理、封装完善的类,这也是后续学习继承、多态等高级特性的基础。

如果本文内容对您的学习有帮助,欢迎点赞、评论、收藏。创作不易,您的支持是我持续输出优质内容的动力!

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

从零到一:Windows环境下Nginx HTTP-FLV模块的实战避坑指南

从零到一&#xff1a;Windows环境下Nginx HTTP-FLV模块的实战避坑指南 流媒体技术的普及让实时视频传输变得触手可及&#xff0c;而Nginx HTTP-FLV模块作为其中的佼佼者&#xff0c;凭借其低延迟、高并发的特性&#xff0c;成为众多开发者的首选。本文将带你从零开始&#xff…

作者头像 李华
网站建设 2026/2/25 5:50:52

通义千问2.5-7B-Instruct API调用:OpenAI兼容接口部署详解

通义千问2.5-7B-Instruct API调用&#xff1a;OpenAI兼容接口部署详解 1. 为什么选通义千问2.5-7B-Instruct&#xff1f;中等体量的“全能型选手” 你可能已经试过不少7B级别的开源模型&#xff0c;但大概率会遇到这些情况&#xff1a;中文回答生硬、长文档直接崩溃、写代码时…

作者头像 李华
网站建设 2026/2/23 1:38:15

ms-swift嵌入模型训练:生成高质量Embedding向量

ms-swift嵌入模型训练&#xff1a;生成高质量Embedding向量 1. 为什么你需要高质量的Embedding向量 你有没有遇到过这样的问题&#xff1a;检索系统返回的结果和用户真正想要的八竿子打不着&#xff1f;RAG应用里&#xff0c;明明文档里有答案&#xff0c;模型却偏偏“视而不…

作者头像 李华
网站建设 2026/2/15 2:24:41

SpringBoot整合Elasticsearch高阶用法:自定义查询DSL嵌入

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然、专业、有“人味”——像一位深耕搜索架构多年的工程师在分享实战心得; ✅ 打破模板化标题(如“引言”“总结”),全文以逻辑流驱动,层层…

作者头像 李华
网站建设 2026/2/25 17:27:30

Z-Image-ComfyUI避坑指南:这些错误千万别犯

Z-Image-ComfyUI避坑指南&#xff1a;这些错误千万别犯 Z-Image-ComfyUI不是又一个“点开即用”的AI绘画玩具——它是一套需要理解、需要配置、更需要经验的生产级文生图工作流系统。部署成功不等于能稳定出图&#xff0c;界面打开不等于提示词有效&#xff0c;模型加载完成也…

作者头像 李华
网站建设 2026/2/23 19:23:24

多语言OCR新选择:LightOnOCR-2-1B免费体验教程

多语言OCR新选择&#xff1a;LightOnOCR-2-1B免费体验教程 你是否还在为扫描件里的中英文混排表格识别不准而反复校对&#xff1f;是否因为日文发票、德语合同或葡萄牙语收据的识别失败&#xff0c;不得不手动录入几十行数据&#xff1f;有没有试过上传一张带数学公式的学术截…

作者头像 李华