Java案例之士兵作战功能实现

简介: 实现的功能比较简单,主要用到了多态的,抽象类以及模板方法模式这几个知识点。效果图如下,哈哈 ,大神勿喷,后面我会把这些知识点详细介绍出来,即使Java学的不好,只要有一点其他语言基础或者没有应该都能看懂了。对于初学Java的人帮助应该蛮大的。嘿嘿。 先上效果图: 源代码: Soldier.javapublic abstract class Soldier {

实现的功能比较简单,主要用到了多态的,抽象类以及模板方法模式这几个知识点。效果图如下,哈哈 ,大神勿喷,后面我会把这些知识点详细介绍出来,即使Java学的不好,只要有一点其他语言基础或者没有应该都能看懂了。对于初学Java的人帮助应该蛮大的。嘿嘿。
先上效果图:
这里写图片描述
源代码:
Soldier.java

public abstract class Soldier {
    private String name;
    public Soldier(String name){
        this.name=name;
    }
    public String getName() {
            return name;
        }
    public  void start(){
        System.out.println("准备攻击···");
    }
    public void end(){
        System.out.println("攻击完成了···");
    }
    public abstract void attack();//每种兵种的攻击方式不同所以设置成抽象类
    public void action() {
        start();
        attack();//调该方法时根据子类的种类调用相应的方法
        end();

    }

LandSoldier.java

public class LandSoldier extends Soldier{
    public  LandSoldier(String name) {
        // TODO Auto-generated method stub
     super(name);
    }
    @Override
    public void attack() {
        // TODO Auto-generated method stub
        //这个方法是必须实现的因为在父类中这个方法是抽象类
    System.out.println(getName()+"使用步枪攻击");;
    }

}

OceanSoldier.java

public class OceanSoldier extends Soldier {
    public  OceanSoldier(String name) {
        // TODO Auto-generated method stub
     super(name);
    }
    @Override
    public void attack() {
        // TODO Auto-generated method stub
        //这个方法是必须实现的因为在父类中这个方法是抽象类
    System.out.println(getName()+"使用鱼雷攻击");;
    }

}

Officer.java


public class Officer extends Soldier {

    private Soldier[] soldiers=new Soldier[2];//军官持有两个士兵
    public Officer(String name) {
        super(name);
        // TODO Auto-generated constructor stub
        soldiers[0]=new LandSoldier("皮皮陆军");
        soldiers[1]=new OceanSoldier("皮皮海军");
    }
    public Soldier[] getSoldiers(){
        return soldiers;
    }

    @Override
    public void attack() {
        // TODO Auto-generated method stub
        //抽象类的抽象方法必须实现
     System.out.println(getName()+"使用手枪攻击");
    }
    //发号司令,让自己的士兵一起发动攻击
    public void callToAttack(){
        for (int i = 0; i < soldiers.length; i++) {
            soldiers[i].action();
        }
        this.action();//自己发动攻击
    }
    //让一个士兵去攻击
    public void callToAttackOne(Soldier soldier){
        soldier.attack();
    }

}

Txt.java

public class Txt {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
     Officer officer=new Officer("皮皮警官");
     officer.callToAttack();
     System.out.println("****************");
     officer.callToAttackOne(officer);//指定警官发动攻击
    officer.callToAttackOne(officer.getSoldiers()[0]);//指定陆军发动攻击
    officer.callToAttackOne(officer.getSoldiers()[1]);//指定海军发动攻击
    }

}

哈哈,代码不多,自己敲一敲,不要复制粘贴哦,监督着你呢!
下面来说用到的知识点:

(1)抽象类以及抽象方法

  在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为:
abstract void 方法名();本例中的抽象方法就是public abstract void attack();
  抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。简单的来说,抽象类生来就是当爸爸(父类)的,因为它就就是为别的类继承自己而生。另外抽象类中的抽象方法子类继承后必须实现。
 本例中因为每个类都一个攻击方法,每个类都有并且不一样,所以考虑的抽象方法。
关于抽象类的更多讲解参考博客:http://blog.csdn.net/chenssy/article/details/12858267

(2)多态

所谓多态就是一个对象变现出来的不同形式,如本例中声明了两个soldier引用分别指向了陆军和海军变量,通过soldier应用调用attack方法时会出现不一样的表现形式。
关于多态的具体知识请参考:
http://www.cnblogs.com/mengdd/archive/2012/12/25/2832288.html
http://www.jb51.net/article/34413.htm

(3)模板方法

模板方法说简单点就是把通过一些一个函数把对象需要执行的其他函数放在里面的方法,这个在我印象中使用在抽象类中的比较多,就如本例军人攻击之前需要准备(第1个方法)然后攻击的方式不一样(第2个方法同时也是抽象方法从而引出这个类是抽象类)最后就是攻击结束(第3个方法)。如果想深入了解参考下面几篇文章:
http://blog.csdn.net/zhangliangzi/article/details/51475133
http://www.cnblogs.com/java-my-life/archive/2012/05/14/2495235.html

(4)对象数组

通过类创建的数组。本例中:
private Soldier[] soldiers=new Soldier[2];//创建Soldier对象数组保存军官持有两个士兵
参考文档:http://www.cnblogs.com/jsjlxgf/p/6143544.html(备注这个人的博客主页为啥这么好看,有知道的私聊我 谢谢)

目录
相关文章
|
3天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
10 2
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
|
2月前
|
人工智能 Java 定位技术
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
这篇文章通过一个使用ChatGPT实现的Java扫雷小游戏案例,展示了ChatGPT在编程领域的应用能力。文章中包含了扫雷游戏的Java代码实现,代码中初始化了雷区地图,随机放置雷,计算每个格子周围雷的数量,并提供了一个简单的文本界面与用户交互进行游戏。游戏通过控制台输入接受玩家的指令,并给出相应的反馈。
人工智能ChatGPT 体验案例:使用ChatGPT实现java扫雷小游戏
|
2月前
|
监控 算法 安全
Java并发编程案例分析:死锁的检测与解决
Java并发编程案例分析:死锁的检测与解决
25 2
|
2月前
|
Java 开发者
Java多线程教程:使用ReentrantLock实现高级锁功能
Java多线程教程:使用ReentrantLock实现高级锁功能
34 1
|
2月前
|
安全 Java API
精通 Java 后台开发:案例分析与实践
精通 Java 后台开发:案例分析与实践
37 2
|
2月前
|
缓存 Java 调度
【Java 并发秘籍】线程池大作战:揭秘 JDK 中的线程池家族!
【8月更文挑战第24天】Java的并发库提供多种线程池以应对不同的多线程编程需求。本文通过实例介绍了四种主要线程池:固定大小线程池、可缓存线程池、单一线程线程池及定时任务线程池。固定大小线程池通过预设线程数管理任务队列;可缓存线程池能根据需要动态调整线程数量;单一线程线程池确保任务顺序执行;定时任务线程池支持周期性或延时任务调度。了解并正确选用这些线程池有助于提高程序效率和资源利用率。
41 2
|
2月前
|
Java
Java枚举使用的基本案例
这篇文章是关于Java枚举的基本使用,通过一个指令下发的代码案例,展示了如何定义枚举、使用枚举以及如何通过枚举实现指令的匹配和处理。
|
2月前
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
2月前
|
前端开发 Java 测试技术
综合案例【商品管理系统-Java基础版】(附完整源码)
综合案例【商品管理系统-Java基础版】(附完整源码)
87 9
|
2月前
|
Java
Java数组的2个小案例(杨辉三角分析和商品管理增删改查)
Java数组的2个小案例(杨辉三角分析和商品管理增删改查)
46 4
下一篇
无影云桌面