军队武器

Weapon类(父类)

package MyProject;
//所有武器的父类
public class Weapon {
}

Shootable类(接口)

package MyProject;
public interface Shootable {//射击行为void shoot();
}

Moveable类(接口)

package MyProject;
public interface Moveable {//移动方法void move();
}

Tank类

package MyProject;
//坦克是一种武器,可移动,可攻击
public class Tank extends Weapon implements Moveable,Shootable{@Overridepublic void move() {System.out.println("坦克移动");}@Overridepublic void shoot() {System.out.println("坦克开炮");}
}

Fighter类

package MyProject;
//战斗机是一种武器,可移动,可射击
public class Fighter extends Weapon implements Moveable,Shootable{@Overridepublic void move() {System.out.println("战斗机起飞");}@Overridepublic void shoot() {System.out.println("战斗机开跑!");}
}

GaoShePao类

package MyProject;
//高射炮是一种武器,可射击,不可移动
public class GaoShePao extends Weapon implements Shootable{@Overridepublic void shoot() {System.out.println("高射炮开炮!!!");}
}

WuZiFeiJi类

package MyProject;
//物资飞机
public class WuZiFeiJi extends Weapon implements Moveable{@Overridepublic void move() {System.out.println("运输机起飞!");}
}

Army类

package MyProject;
public class Army {//武器数组private Weapon[] weapons;//创建军队的构造方法public Army(int count){//动态初始化数组中每一个元素默认值是null//武器组组没有放武器weapons = new Weapon[count];}//将武器加入数组public void addWeapon(Weapon weapon) throws AddWeaponException{for (int i = 0; i < weapons.length; i++) {if(null == weapons[i]){weapons[i] = weapon;System.out.println(weapon+":武器添加成功!");return;}}//程序如果执行到这,说明武器没有添加成功throw new AddWeaponException("武器数量已经达到上限!");}//所有可攻击的武器public void attackAll(){//遍历数组for (int i = 0; i < weapons.length; i++) {if(weapons[i] instanceof Shootable){//调用子类中特有的方法,向下转型Shootable shootable = (Shootable)weapons[i];shootable.shoot();}}}//所有课移动的武器public void moveAll(){//遍历数组for (int i = 0; i < weapons.length; i++) {if(weapons[i] instanceof Moveable){//调用子类中特有的方法,向下转型Moveable moveable = (Moveable)weapons[i];moveable.move();}}}
}

AddWeaponException类(异常类)

package MyProject;
//添加武器异常
public class AddWeaponException extends Exception{public AddWeaponException(){}public AddWeaponException(String s){super(s);}
}

Test类

package MyProject;
public class Test {public static void main(String[] args) {//构建一个军队Army army = new Army(4);//军队只有四个武器//创建武器Fighter fighter = new Fighter();Fighter fighter2 = new Fighter();GaoShePao gaoShePao = new GaoShePao();Tank tank = new Tank();WuZiFeiJi wuZiFeiJi = new WuZiFeiJi();//添加武器try {army.addWeapon(fighter);army.addWeapon(gaoShePao);army.addWeapon(tank);army.addWeapon(wuZiFeiJi);army.addWeapon(fighter2);} catch (AddWeaponException e) {System.out.println(e.getMessage());
/*          MyProject.Fighter@27973e9b:武器添加成功!MyProject.GaoShePao@312b1dae:武器添加成功!MyProject.Tank@7530d0a:武器添加成功!MyProject.WuZiFeiJi@27bc2616:武器添加成功!武器数量已经达到上限!*/}//所有可移动的移动army.moveAll();//战斗机起飞 坦克移动 运输机起飞!//所有可攻击的攻击army.attackAll();//战斗机开跑 高射炮开炮!!! 坦克开炮}
}

军队武器java代码相关推荐

  1. Java代码精简之道

    前言 古语有云: 道为术之灵,术为道之体:以道统术,以术得道. 其中:"道"指"规律.道理.理论","术"指"方法.技巧.技术&q ...

  2. Java 代码精简之道 侵删

    前言 古语有云: 道为术之灵,术为道之体:以道统术,以术得道. 其中:"道"指"规律.道理.理论","术"指"方法.技巧.技术&q ...

  3. 编写高性能Java代码的最佳实践

    编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...

  4. cmd怎么实现Java你好_java环境配置以及如何在cmd窗口运行java代码

    对于初学java的人来说,电脑的环境配置也许会让你头疼,但只要你认真一些学习,相信对你来说都是OK的啦~ 首先回到桌面,选择我的电脑,单击右键属性,进入高级系统设置,点击环境变量设置.用户变量选择Te ...

  5. Android 使用java 代码获取res 里面的value 定义的数组

    现在res value 里面定义了一个array.xml 内容如下 <?xml version="1.0" encoding="utf-8"?> & ...

  6. 使用JAVA代码实现Android布局(一)RelativeLayout

    通常我们使用XML来书写Android的图形界面,XML虽然编写方便,但是在某些情况下不如JAVA代码灵活,所以在某些环境下还是必须使用JAVA代码来编写界面.我们以下XML代码为例,编写相应的JAV ...

  7. 转--Android如何在java代码中设置margin

    ========  3 在Java代码里设置button的margin(外边距)? 1.获取按钮的LayoutParams LinearLayout.LayoutParams layoutParams ...

  8. java 读取流的字符编码格式_如何使用Java代码获取文件、文件流或字符串的编码方式...

    标签: 今天通过网络资源研究了一下如何使用Java代码获取文件.文件流或字符串的编码方式,现将代码与大家分享: package com.ghj.packageoftool; import info.m ...

  9. matlab中调用java代码_Matlab中调用第三方Java代码

    在Java中采用Matlab JA Builder可以实现调用m文件,采用这样的方式,可在Matlab的M文件中,直接调用Java类.这种方式可以表示为Java--> Matlab( m, Ja ...

最新文章

  1. Nature Methods:宏基因组物种组成分析工具MetaPhlAn2
  2. 做不了爱人,我们做什么?
  3. 纹理对象的实时姿态估计
  4. 我想成为计算机专业第一,我对计算机专业学生的忠告。
  5. 如何将32 x 32像素图标转换为16 x 16像素值的图标
  6. Linux 线程池的概念与实现
  7. AI上推荐 之 FiBiNET模型(特征重要性选择与双线性特征交叉)
  8. Aurix TC397多核开发建议
  9. 【愚公系列】华为云系列之DevCloud+ECS+MySQL搭建超级冷笑话网站【开发者专属集市】
  10. 托业考试常遇到的科学论文词汇汇总
  11. 大数据时代的地理信息系统发展
  12. App开发中适用的短信SDK
  13. sdp3命令 matlab,Yalmip学习笔记
  14. Android 双u盘方案
  15. Python程序执行时间测试
  16. JS下载文件到本地集合
  17. springboot核心基础之spring.factories机制
  18. 记录一个视频播放器VLC media player
  19. 实验一:汇编语言编程
  20. win10第一次安装数据库失败解决方案

热门文章

  1. 带孩子们做环球旅行的读后感_年轻爸妈别糊涂,这些奶奶、姥姥们不适合带孩子...
  2. Windows RC版、RTM版、OEM版、RTL版、VOL版的区别
  3. 原生实现freeCodeCamp上的Build a Personal Portfolio Webpage
  4. 屏蔽百度搜索结果页的推送广告
  5. 图 邻接矩阵幂的含义 离散数学定理14.11
  6. 【从零搭建后端基础设施系列(九)】-- VM容器化
  7. [USACO13FEB]拖拉机Tractor
  8. SSD: Single Shot MultiBox Detector 之再阅读
  9. 如何学习(Java)
  10. 菲尔兹奖得主陶哲轩:解题的策略