0603封装继承多态,综合练习

(封装、继承、多态)创建三个类,组成一个继承树,表示游戏中的角色。

描述如下:

父类: 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,表示组队所有成员进行攻击时,对敌人造成的总伤害值 省略 get/set 方法后的类图如下:
    40419e9a86e02c346c52e4076ec14050c3b.jpg
    根据类图和描述,创建相应的类。并编写相应的测试代码。
     
package com.imooc.work;

public abstract class Role {
	private String name;//角色名
	
	public abstract int attack();//返回角色的攻击对敌人的伤害
	
	//构造方法
	public Role() {
	}

	public Role(String name) {
		super();
		this.name = name;
	}


	//getter和setter
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}
package com.imooc.work;

public class Soldier extends Role {
	private int damage;//伤害值
	 
	//重写attact()
	public int attack() {
		// TODO Auto-generated method stub
		return damage;
	}
	
	//构造方法
	public Soldier() {
		super();
	}

	public Soldier(int damage,String name) {
		super(name);
		this.damage = damage;
	}
	
	//getter和setter
	public int getDamage() {
		return damage;
	}

	public void setDamage(int damage) {
		this.damage = damage;
	}
	
	

}
package com.imooc.work;

public class Magicer extends Role {
	
	private int level;//魔法等级

	//构造方法
	public Magicer() {
		super();
	}

	public Magicer(int level,String name) {
		super(name);
		this.setLevel(level);;
	}

	//重写attact()
	public int attack() {
		// TODO Auto-generated method stub
		return level*5;
	}

	//getter和setter
	public int getLevel() {
		return level;
	}

	public void setLevel(int level) {
		if(level>10||level<1){ //等级应在1~10之间
			System.out.println("魔法师等级赋值错误");
			level = 0;
		}
		this.level = level;
	}
	
	
	

}
package com.imooc.work;

public class Team {
	private Role[] team = new Role[6];//队伍
	private int i=0;//队伍中成员数
	
	//组队增加一个成员
	public void addMember(Role role){
		if(i < 6){
			team[i] = role;
			i++;
		}else{
			System.out.println("该队伍成员达到6人,不能继续增加");
		}
	}
	
	//组队所有成员进行攻击时,对敌人造成的总伤害值
	public int attackSum() {
		int sum=0;//储存总攻击值
		for(int j=0;j<i;j++){
			sum += team[j].attack();
		}
		return sum;
		
	}

	public Role[] getTeam() {
		return team;
	}

	public void setTeam(Role[] team) {
		this.team = team;
	}	
	
}
package com.imooc.work;

public class TestTeam {

	public static void main(String[] args) {
		Team t=new Team();
		t.addMember(new Magicer(2, "魔法师1"));
		t.addMember(new Soldier(1, "士兵1"));
		t.addMember(new Soldier(2, "士兵2"));
		t.addMember(new Soldier(3, "士兵3"));
		t.addMember(new Soldier(4, "士兵4"));
		t.addMember(new Soldier(5, "士兵5"));
		t.addMember(new Soldier(30, "士兵6"));
		System.out.println("队伍中成员为:");
		for(int i= 0;i < t.getTeam().length;i++){
			System.out.println("成员"+(i+1)+":"+t.getTeam()[i].getName()+" 伤害值为:"+t.getTeam()[i].attack());
		}
		System.out.println("队伍对敌人造成总伤害值为"+t.attackSum());
	}
}

8b261477aa2fa38d55218c2bbb459782d9d.jpg

转载于:https://my.oschina.net/u/3822073/blog/1827297

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值