写一个程序来模拟组建一支部队。
首先定义两个接口,一个Attack(可攻击的)接口,包含一个方法fire(),表示射击;一个Mobile(可移动的)接口,包含一个方法move(),表示前进。
public interface Attack {
public void fire();
}
public interface Mobile {
public void move();
}
然后定义一个抽象类Soldier代表士兵,实现Mobile接口,由于士兵不同前进方式不同,所以此处不实现move方法。
public abstract class Soldier implements Mobile{
String name;
public Soldier(String name) {
this.name = name;
}
public Soldier() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
再写Soldier的三个子类:步兵Foot、救护兵Aidman和指挥官Commander,分别给出move()方法的不同实现,三个子类的move方法分别输出:“步兵跑步前进”,“救护兵坐救护车前进”,“指挥官骑马前进”。Foot类还实现了Attack接口,在fire()方法中输出“步兵开枪射击”。
public class Foot extends Soldier implements Attack{
public Foot(String name) {
super(name);
}
public Foot() {
}
@Override
public void move() {
System.out.println(this.name+"跑步前进");
}
@Override
public void fire() {
System.out.println(this.name+"开枪射击");
}
}
public class Aidman extends Soldier{
public Aidman(String name) {
super(name);
}
public Aidman() {
}
@Override
public void move() {
System.out.println(this.name+"坐救护车前进");
}
}
public class Commander extends Soldier{
public Commander(String name) {
super(name);
}
public Commander() {
}
@Override
public void move() {
System.out.println(this.name+"骑马前进");
}
}
最后写一个类Army,表示一支军队,这个类有两个属性:一个整型的number,表示军队人数;一个Soldier类型数组s,用来存放士兵对象。该类还提供一个方法addSoldiers(Soldier soldier), 表示把一个士兵对象加入到数组s中,当超过军队人数则不能再加入了。在这个类中还定义两个方法moveAll()让s数组中所有的士兵前进;以及attackAll()让s数组中的所有可以进攻的士兵进攻。
public class Army {
private int number;
private Soldier [] s ;
private int cout=0;
public void addSoldiers(Soldier soldier){
if(cout>=this.number){
System.out.println("超过军队人数,不能再加入了");
}
else{
s[cout++]=soldier;
}
}
public void moveAll(){
for(int i=0;i<s.length;i++){
s[i].move();
}
}
public void attackAll(){
for(int i=0;i<s.length;i++){
if(s[i] instanceof Foot){
Foot f = (Foot) s[i];
f.fire();
}
}
}
public Army(int number) {
this.number = number;
s = new Soldier[number];
}
public Army() {
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public Soldier[] getS() {
return s;
}
public void setS(Soldier[] s) {
this.s = s;
}
}
写一个主类,在主方法中生成几个士兵对象,加入到军队中。然后分别调用attackAll和moveAll方法。
public class TestArmy {
public static void main(String[] args) {
Soldier []s = new Soldier[4];
s[0]= new Foot("步兵1");
s[1] = new Foot("步兵2");
s[2] = new Aidman("救护兵");
s[3] =new Commander("指挥官");
Army a1 =new Army(3);
for(int i=0;i<s.length;i++){
a1.addSoldiers(s[i]);
}
a1.moveAll();
a1.attackAll();
}
}