每日一练编程题: 今天是【多态的使用】

每日一练【多态的使用】

  • 创建三个类,组成一个继承树,表示游戏中的角色。
    描述如下:
    • 父类:Role。是所有职业的父类。
    • 属性:name,表示角色的名字。
    • 方法:public int attack(),
      • 该方法返回值为角色的攻击对敌人的伤害。
  • Role 有两个子类:
    • 1) 法师Magicer
    • 属性:魔法等级(范围为1 ~ 10)
    • 方法: public int attack(),
      • 该方法返回法师的攻击对敌人造成的伤害值。
      • 法师攻击伤害值为:魔法等级*魔法基本伤害值(固定为5)
    • 2) 战士Soldier
    • 属性:攻击伤害值
    • 方法: public int attack(),
      • 该方法返回战士的攻击对敌人造成的伤害值。
      • 战士的攻击伤害值为:其攻击伤害属性值
  • 注意:上述的三个类所有属性都应当作为私有,并提供相应的get/set 方法。
    再设计一个Team 类,表示一个组队。具有如下方法
    • 1) addMember,表示组队增加一个成员。注意:组队成员最多为6 人
      提示:应当利用一个数组属性,保存所有成员
    • 2) attackSum,表示组队所有成员进行攻击时,对敌人造成的总伤害值

参考UML类图

在这里插入图片描述

参考代码

Role 类
package day528.pdf6.pdf6t17;
/**
* Description: 所有职业的父类
* date: 2024/5/30 23:01
* @author: LiCoffee 
* @since JDK 1.8
*/
public class Role {
    private String name;//名字
    public Role() {
    }
    public Role(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @descriptions 计算角色的攻击对敌人的伤害
     * @author LiCoffee
     * @date 2024/5/30 23:03
     * @return -角色的攻击对敌人的伤害
     **/
    public int attack(){
        return 0;
    }
}
Magicer类
package day528.pdf6.pdf6t17;
/**
 * Description: 法师Magicer
 * date: 2024/5/30 23:06
 * @author: LiCoffee
 * @since JDK 1.8
 */
public class Magicer extends Role{
    private int level;//魔法等级(范围为1 ~ 10)
    private final int baseHurt = 5;//魔法基本伤害值(固定为5)
    public Magicer() {
    }
    public Magicer(String name, int level) {
        super(name);
        this.level = level;
    }
    public int getLevel() {

        return level;
    }
    public void setLevel(int level) {
        /*
        判断魔法等级是在(范围为1 ~ 10) 
         */
        if (level > 10) {
            this.level = 10;
        }else if (level < 1) {
            this.level = 1;
        }else {
            this.level = level;
        }
    }
    //重写父类attack()方法
    @Override
    public int attack() {
        return super.attack() + getLevel() * baseHurt;
    }
}
Soldier类
package day528.pdf6.pdf6t17;
/**
* Description: Soldier战士
* date: 2024/5/30 23:06
* @author: LiCoffee
* @since JDK 1.8
*/
public class Soldier extends Role{
    private int hurt;//攻击伤害值
    public Soldier() {
    }
    public Soldier(String name, int hurt) {
        super(name);
        this.hurt = hurt;
    }
    public int getHurt() {
        return hurt;
    }
    public void setHurt(int hurt) {
        this.hurt = hurt;
    }
   //重写父类attack()方法
    @Override
    public int attack() {
        return super.attack() + getHurt();
    }
}
Team类
package day528.pdf6.pdf6t17;
/**
* Description: Team组队
* date: 2024/5/30 23:13
* @author: LiCoffee
* @since JDK 1.8
*/
public class Team {
    private final int maxPeoNum = 6;//组队成员最多为6 人
    private int nowPeoNum = 0;//当前队伍人数,标记方便遍历,防止空指针异常
    private Role[] roles = new Role[maxPeoNum];

    public Team(Role[] roles) {
        if (roles.length > maxPeoNum - nowPeoNum) {//判断加队人数是否大于最大人数
            System.out.println("不好意思,超出队伍最大人数,最大人数为6");
        }else{
            nowPeoNum += roles.length;//当前队伍人数+新队伍人数
            System.arraycopy(roles,0,this.roles,0,roles.length); //调用System.arraycopy,将新队伍加入
        }
    }
    public Role[] getRoles() {
        return roles;
    }

    public void setRoles(Role[] roles) {
        if (roles.length > maxPeoNum - nowPeoNum) {//判断加队人数是否大于最大人数
            System.out.println("不好意思,超出队伍最大人数,最大人数为6");
        }else{
            nowPeoNum += roles.length;//当前队伍人数+新队伍人数
            System.arraycopy(roles,0,this.roles,0,roles.length);

        }
    }
    
/**
 * @descriptions 表示组队增加一个成员。
 * @author LiCoffee
 * @date 2024/5/30 23:20
 * @param role -职业
 **/
    public void addMember(Role role){
        if(nowPeoNum == maxPeoNum){
            System.out.println("不好意思,队伍已满,最大人数为6");
        }else {
            this.roles[nowPeoNum] = role;
            nowPeoNum += 1;//当前队伍人数+1
        }
    }
    
/**
 * @descriptions 表示组队所有成员进行攻击时,对敌人造成的总伤害值 
 * @author LiCoffee
 * @date 2024/5/30 23:23
 * @return toatlHurt -对敌人造成的总伤害值 
 **/
    public int attackSum(){
        int toatlHurt = 0;
        for (int i = 0; i < nowPeoNum; i++) {
            toatlHurt += this.roles[i].attack();
        }
        return toatlHurt;
    }
}

Test测试类
public class Test {
    public static void main(String[] args) {
        Role[] roles = {new Magicer("s",1),new Soldier("d",10)};
        Team team = new Team(roles);
        System.out.println("总伤害:");
        System.out.println(team.attackSum());
        System.out.println("================");
        System.out.println("加入一个人");
        team.addMember(new Soldier("f",20));
        System.out.println(team.attackSum());
    }
}
运行结果

在这里插入图片描述

最后

如果感觉有收获的话,点个赞 👍🏻 吧。
❤️❤️❤️本人菜鸟修行期,如有错误,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍在这里插入图片描述

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值