面向对象编程综合实战

目录

前言

  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 编程的核心,需熟练掌握类的抽象与创建能力 ------ 能够从业务场景中提取事物的核心属性与行为,定义出结构合理、封装完善的类,这也是后续学习继承、多态等高级特性的基础。

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

相关推荐
呆呆敲代码的小Y9 分钟前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
水无痕simon24 分钟前
3、工程重构
java·spring cloud·重构
阿里云基础软件34 分钟前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 项目:需求分析与滑动数据设计
java·开发语言·交友
前端 贾公子2 小时前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
CoderYanger2 小时前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
一条泥憨鱼2 小时前
【Kafka】零基础学习教程
java·分布式·学习·kafka
Wang's Blog2 小时前
Java 项目实战:交友项目 - 即时通信总结:全链路复盘、可复用清单与自检
java·python·交友
文丑颜不良啊2 小时前
LeetCode1501~1520题目解析
java·leetcode
长不大的杨瑞杰3 小时前
OpenCode v2 LSP 实战:内置语言服务器、自定义配置与诊断闭环
java·人工智能·typescript·lsp·opencode