*(封装、继承、多态)创建三个类,组成一个继承树,表示游戏中的角色。
描述如下:
父类: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 方法后的类图如下:
根据类图和描述,创建相应的类。并编写相应的测试代码。
遇到的问题:(1)不知怎样将对象存储在数组中。解决:将数组类型设置为与将要放置在数组中的对象一样的类型。
(2)在设置父类对象的引用时,父类对象只能调用子类对象中从父类那里继承下来的方法或属性。
代码:
package com.shichuang.example;
//import java.util.Scanner;
//import java.util.Scanner;
class Role{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int attack(){
return 0;
}
}
class Magicer extends Role{
private int level;//范围1-10
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int attack(){
return level*5;
}
}
class Soldier extends Role{
private int hurt;
public int getHurt() {
return hurt;
}
public void setHurt(int hurt) {
this.hurt = hurt;
}
public int attack(){
return hurt;
}
}
class Team{
static int i = 0;
static Role member[] = new Role[6];
void addMember(Role role){
member[i++] = role;
}
int attackSum(){
int sum=0;
for(int j=0; j<i; j++){
sum += member[j].attack();
}
return sum;
}
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int attack(){
return 0;
}
}
class Magicer extends Role{
private int level;//范围1-10
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
public int attack(){
return level*5;
}
}
class Soldier extends Role{
private int hurt;
public int getHurt() {
return hurt;
}
public void setHurt(int hurt) {
this.hurt = hurt;
}
public int attack(){
return hurt;
}
}
class Team{
static int i = 0;
static Role member[] = new Role[6];
void addMember(Role role){
member[i++] = role;
}
int attackSum(){
int sum=0;
for(int j=0; j<i; j++){
sum += member[j].attack();
}
return sum;
}
}
public class Main17{
public static void main(String args[]){
Role role = new Role();
Soldier soldier = new Soldier();
role = soldier;
soldier.setName("少华");
soldier.setHurt(5);
System.out.println("战士" + soldier.getName()+"的攻击伤害值为:"+soldier.attack());
Magicer magicer = new Magicer();
role = magicer;
role.setName("君艳法师");
magicer.setLevel(7);
System.out.println("战士" + magicer.getName()+"的攻击伤害值为:"+magicer.attack());
Team team = new Team();
team.addMember(magicer);
team.addMember(soldier);
System.out.println("所有成员的伤害总值为:"+team.attackSum());
}
}
如有可以改进的地方,真诚希望您留言,希望大家一起进步。