5, (封装、继承、多态)创建三个类,组成一个继承树,表示游戏中的角色。
描述如下:
父类: 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 方法后的类图如下:
Role类
package org.jsoft.work;
public abstract class Role { //父类职业
static int sum = 0; //团队人数
private String name; //职业姓名
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public abstract int attack(); //攻击伤害
}
Magicer类
package org.jsoft.work;
public class Magicer extends Role{ //法师继承父类
private int grade; //法师等级
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
Magicer(String name,int grade){ //初始化,团队人数增加
setName(name);
this.grade = grade;
sum++;
}
@Override
public int attack() { //重写父类方法,返回伤害值
// TODO Auto-generated method stub
return grade*5;
}
}
Soldier类
package org.jsoft.work;
public class Soldier extends Role{ //战士继承父类
private int hurt; //战士伤害
public int getHurt() {
return hurt;
}
public void setHurt(int hurt) {
this.hurt = hurt;
}
Soldier(String name,int hurt){ //初始化,团队人数增加
setName(name);
this.hurt = hurt;
sum++;
}
@Override
public int attack() { //重写父类方法,返回伤害值
// TODO Auto-generated method stub
return hurt;
}
}
Team类
package org.jsoft.work;
public class Team { //Team 类
Role [] role = new Role[6]; //Role类型数组,人数最多为6
public int addMember(Role r){ //团队成员传入数组,返回团队人数
role[Role.sum-1] = r;
return Role.sum;
}
public int attackSum(){ //计算团队伤害值
int sumAttack = 0;
for(int i=0;i<Role.sum;i++){
sumAttack = sumAttack + role[i].attack();
}
return sumAttack;
}
}
Test类
package org.jsoft.work;
public class Test { //测试类
public static void main(String[] args) {
Team t0 = new Team(); //新建团队
Magicer m0 = new Magicer("法师A",10); //新建法师
System.out.println("团队成员:"+t0.addMember(m0)+"人 "+m0.getName());//输出团队成员
System.out.println("团队伤害:"+t0.attackSum());//输出团队伤害
Soldier s0 = new Soldier("战士B",10);
System.out.println("团队成员:"+t0.addMember(s0)+"人 "+m0.getName()+" "+s0.getName());
System.out.println("团队伤害:"+t0.attackSum());
}
}