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
类,给出父类抽象方法具体实现。
public class Tank extends Weapon
public class Flighter extends Weapon
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
游戏结束!
ヾ(◍°∇°◍)ノ゙