表示射手的接口名为Adc,包含名为shoot的行为,表示一次射击造成若干伤害。不同的射手shoot造成的伤害不同,弓箭手每次伤害为10,飞镖客每次伤为12,害枪手每次为18,炮手每次伤害为30。
定义一个静态方法Kill表示不同射手攻击某目标的过程,设定目标的生命值,射手循环进行射击,直到目标生命值为0。
用类分别表示不同类型的射手,并用多态定义和调用Kill方法。
表示射手的接口名为Adc,包含名为shoot的行为,表示一次射击造成若干伤害。不同的射手shoot造成的伤害不同,弓箭手每次伤害为10,飞镖客每次伤为12,害枪手每次为18,炮手每次伤害为30。
定义一个静态方法Kill表示不同射手攻击某目标的过程,设定目标的生命值,射手循环进行射击,直到目标生命值为0。
用类分别表示不同类型的射手,并用多态定义和调用Kill方法。
/**
* ADC
*/
public abstract class Adc {
/**
* 伤害
*/
public abstract Integer getHurt();
/**
* 射击
* @param life 生命值
*/
public void shoot(int life) {
int hurt = this.getHurt();
int count = 0;
for (int i = 0; i < life; i += hurt) {
System.out.println("第" + (++count) + "次射击");
}
}
}
/**
* 弓箭手
*/
public class Archer extends Adc {
@Override
public Integer getHurt() {
return 10;
}
@Override
public void shoot(int life) {
System.out.println("弓箭手开始射击");
super.shoot(life);
System.out.println("弓箭手结束射击");
}
}
/**
* 飞镖客
*/
public class FlyingEscort extends Adc {
@Override
public Integer getHurt() {
return 12;
}
@Override
public void shoot(int life) {
System.out.println("飞镖客开始射击");
super.shoot(life);
System.out.println("飞镖客结束射击");
}
}
/**
* 炮手
*/
public class Gunner extends Adc {
@Override
public Integer getHurt() {
return 30;
}
@Override
public void shoot(int life) {
System.out.println("炮手开始射击");
super.shoot(life);
System.out.println("炮手结束射击");
}
}
/**
* 害枪手
*/
public class Shooter extends Adc {
@Override
public Integer getHurt() {
return 18;
}
@Override
public void shoot(int life) {
System.out.println("害枪手开始射击");
super.shoot(life);
System.out.println("害枪手结束射击");
}
}
/**
* Kill
*/
public class Kill {
public static void kill(int life, Adc adc) {
adc.shoot(life);
}
public static void main(String[] args) {
int life = 100;
kill(life, new Archer());
System.out.println();
kill(life, new FlyingEscort());
System.out.println();
kill(life, new Gunner());
System.out.println();
kill(life, new Shooter());
}
}