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(备注这个人的博客主页为啥这么好看,有知道的私聊我 谢谢)

目录
相关文章
|
25天前
|
存储 小程序 前端开发
微信小程序与Java后端实现微信授权登录功能
微信小程序极大地简化了登录注册流程。对于用户而言,仅仅需要点击授权按钮,便能够完成登录操作,无需经历繁琐的注册步骤以及输入账号密码等一系列复杂操作,这种便捷的登录方式极大地提升了用户的使用体验
243 12
|
2月前
|
存储 监控 Java
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
130 12
|
3月前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
122 34
|
4月前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
151 60
|
4月前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
67 2
|
4月前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
128 3
|
4月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
99 2
|
4月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
68 2
|
5月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
116 15
|
5月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
48 1

热门文章

最新文章