Java接口与类之间继承,多态的练习,文字游戏,

Java接口与类之间继承,多态的练习例题,文字游戏,

问题描述:

一、定义两个接口:

public interface Assaultable可攻击的,
接口有一个抽象方法public abstract void attack()攻击。

public interface Mobile可移动的,
接口有个一个抽象方法public abstract void move()移动。

二、定义一个抽象类-武器类,该类实现(一)中的两个接口,public abstract class Weapon implements Assaultable,Mobile

三、定义3个类 Tank Flighter WarShip 都继承于Weapon类,给出父类抽象方法具体实现。

  1. public class Tank extends Weapon
  2. public class Flighter extends Weapon
  3. public class WarShip extends Weapon

四、定义一个Army军队类,

  • 必要设计如下

  • 成员变量:private Weapon[] weapons;数组用于存储所有武器。

  • 构造方法:public Army(int Max) {}Max用于初始化数组

  • 成员方法:

    • public void attackAll() {} 控制军队中所有武器攻击。
    • public void moveAll() {}控制军队中所有武器移动

五、测试。

详细设计:

接口:Assaultable

package com.newedu.javabase.day04.exrecises;
/**
 * 接口名称: Assaultable 可攻击的
 * 
 * @author 
 *
 */
public interface Assaultable {
	/**
	 * 抽象方法: attack();  攻击
	 */
	public abstract void attack();
}

接口:Mobile

package com.newedu.javabase.day04.exrecises;
/**
 * 接口名:Mobile 可移动的
 * 抽象方法:move  移动
 * @author 
 *
 */
public interface Mobile {
	/**
	 * 抽象方法: move();  移动
	 */
	public abstract void move();
}

抽象类:Weapon

package com.newedu.javabase.day04.exrecises;
/**
 * 抽象类,武器类
 * 实现接口:可攻击的,可移动的
 * @author 
 *
 */
public abstract class  Weapon implements Assaultable,Mobile {

}

类:Tank

package com.newedu.javabase.day04.exrecises;
/**
 * 坦克--类--继承于--武器类
 * @author 
 *
 */
public class Tank extends Weapon {

	@Override
	public void attack() {
		System.out.println("-Tank-attack-");
	}

	@Override
	public void move() {
		System.out.println("-Tank-move-");
	}
	
}

类:Flighter

package com.newedu.javabase.day04.exrecises;
/**
 * 战斗机--类--继承于--武器类
 * @author 
 *
 */
public class Flighter extends Weapon {

	@Override
	public void attack() {
		System.out.println("-Flighter-attack-");
	}

	@Override
	public void move() {
		System.out.println("-Flighter-move-");
	}
}

类:WarShip

package com.newedu.javabase.day04.exrecises;
/**
 * 战舰--类--继承于--武器类
 * @author 
 *
 */
public class WarShip extends Weapon {
	@Override
	public void attack() {
		System.out.println("-WarShip-attack-");
	}

	@Override
	public void move() {
		System.out.println("-WarShip-move-");
	}
}

类:Army

package com.newedu.javabase.day04.exrecises;
/**
 * 军队类
 * 成员变量:Weapon[] W 数组,用于储存拥有的所有武器
 * @author 
 *
 */
public class Army {
	private Weapon[] weapons;
	private int Max;
	private int flag = 0;
	public Army() {
	}
	public Army(int Max) {
		this.Max = Max;
		this.weapons =new Weapon[Max];
	}
	public void addWeapon(Weapon newWeapon) {
		if(flag<Max) {
			this.weapons[flag] = newWeapon;
			flag++;
		}
		else {
			System.out.println("您最多拥有"+Max+"个武器!");
		}
	}
	public void attackAll() {
		System.out.println("============所有武器准备攻击!===============");
		for(int i=0;i<weapons.length;i++) {
			System.out.println("第"+(i+1)+"个武器攻击");
			weapons[i].attack();
		}
	}
	public void moveAll() {
		System.out.println("============所有武器准备移动!===============");
		for(int i=0;i<weapons.length;i++) {
			System.out.println("第"+(i+1)+"个武器移动");
			weapons[i].move();
		}
	}
}

Demo

package com.newedu.javabase.day04.exrecises;

import java.util.Scanner;

public class Test01 {

	public static void main(String[] args) {
		int num = 0;
		System.out.println("请创建一支军队!");
		Scanner input =new Scanner(System.in);
		System.out.println("请输入需要武器的数量!");
		if(input.hasNextInt()) {
			num = input.nextInt();
		}
		int i = 0;
		Army army = new Army(num);
		while (i<num) {
			int n= 0;
			System.out.println("请选择第"+(i+1)+"个武器\n1.Tank\t2.Flighter\t3.WarShip");
			if(input.hasNextInt()) {
				n = input.nextInt();
			}
			switch (n) {
			case 1:
				army.addWeapon(new Tank());
				i++;
				break;
			case 2:
				army.addWeapon(new Flighter());
				i++;
				break;
			case 3:
				army.addWeapon(new WarShip());
				i++;
				break;
			default:
				System.out.println("请输入正确序号!");
				break;
			}
			if(i==num) {
				System.out.println("武器库武器添加完成!");
			}
		}
		int flag = 1;
		do {
			army.attackAll();
			army.moveAll();
			System.out.println("是否继续攻击!\n1.继续攻击\t2.退出游戏");
			if(input.hasNextInt()) {
				flag = input.nextInt();
			}
		}while (flag!=2);
		input.close();
		System.out.println("游戏结束!");
	}
}

运行结果:

请创建一支军队!
请输入需要武器的数量!
4
请选择第1个武器
1.Tank	2.Flighter	3.WarShip
1
请选择第2个武器
1.Tank	2.Flighter	3.WarShip
2
请选择第3个武器
1.Tank	2.Flighter	3.WarShip
3
请选择第4个武器
1.Tank	2.Flighter	3.WarShip
2
武器库武器添加完成!
============所有武器准备攻击!===============1个武器攻击
-Tank-attack-2个武器攻击
-Flighter-attack-3个武器攻击
-WarShip-attack-4个武器攻击
-Flighter-attack-
============所有武器准备移动!===============1个武器移动
-Tank-move-2个武器移动
-Flighter-move-3个武器移动
-WarShip-move-4个武器移动
-Flighter-move-
是否继续攻击!
1.继续攻击	2.退出游戏
1
============所有武器准备攻击!===============1个武器攻击
-Tank-attack-2个武器攻击
-Flighter-attack-3个武器攻击
-WarShip-attack-4个武器攻击
-Flighter-attack-
============所有武器准备移动!===============1个武器移动
-Tank-move-2个武器移动
-Flighter-move-3个武器移动
-WarShip-move-4个武器移动
-Flighter-move-
是否继续攻击!
1.继续攻击	2.退出游戏
2
游戏结束!

​ ヾ(◍°∇°◍)ノ゙

发布了18 篇原创文章 · 获赞 2 · 访问量 1894

猜你喜欢

转载自blog.csdn.net/CN_Orange_/article/details/105316185