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