实现的功能比较简单,主要用到了多态的,抽象类以及模板方法模式这几个知识点。效果图如下,哈哈 ,大神勿喷,后面我会把这些知识点详细介绍出来,即使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(备注这个人的博客主页为啥这么好看,有知道的私聊我 谢谢)

Java案例之士兵作战功能实现的更多相关文章

  1. Java案例之随机验证码功能实现

    实现的功能比较简单,就是随机产生了四个字符然后输出.效果图如下,下面我会详细说一下实现这个功能用到了那些知识点,并且会把 这些知识点详细的介绍出来.哈哈 ,大神勿喷,对于初学Java的人帮助应该蛮大的 ...

  2. _00019 Storm架构介绍和Storm获取案例(简单的官方网站Java案例)

    博文作者:妳那伊抹微笑 itdog8 地址链接 : http://www.itdog8.com(个人链接) 博客地址:http://blog.csdn.net/u012185296 博文标题:_000 ...

  3. JAVA实现双向链表的增删功能

    JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...

  4. java实现循环链表的增删功能

    java实现循环链表的增删功能,完整代码 package songyan.test.demo; public class Demo { // java 实现循环链表 public static voi ...

  5. Atitit php java python nodejs错误日志功能的比较

    Atitit php  java  python  nodejs错误日志功能的比较 1.1. Php方案 自带 1 1.2. Java解决方案 SLF4J 1 1.3. Python解决方案 自带lo ...

  6. Fastjson是一个Java语言编写的高性能功能完善的JSON库。

    简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库. 高性能 fastjson采用独创的算法,将parse的速度提升到极致,超过所有json库,包括曾经号称最快的jackson. ...

  7. java实现网站paypal支付功能并且异步修改订单的状态

    java实现网站paypal支付功能并且异步修改订单的状态:步骤如下 第一步:去paypal的官网https://www.paypal.com注册一个个人账号,在创建沙箱测试账号时需要用到 第二步:p ...

  8. Java实现在线预览功能

    java实现在线预览功能,需要用到  jacob.dll jacob.jar   预览pdf所需js  pdfobject.min.js 将上传文件转为pdf保存. <div class=&qu ...

  9. 【java】java自带的java.util.logging.Logger日志功能

    偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下. 1.Java自带的日志功能,默认的配置 ①Logger的默认配置,位置在JRE安装目录下lib中的logg ...

随机推荐

  1. ibatsi学习总结

    学习来源:黑马程序员 先总结一下遇到的问题 问题1:1,resultMap 可以不写,比如配置1 配置1: <typeAlias alias="puser" type=&qu ...

  2. ORA-00933 SQL命令未正确结束 INSERT INTO ... SELECT

    最近在修改数据库存储过程时,出现了一个ORA-00933错误, 执行的是 INSERT INTO...SELECT 语句,具体语句如下: INSERT INTO BASP_DX.QLR@GT(BDCD ...

  3. SIM卡是什么意思?你所不知道的SIM卡知识扫盲(详解)【转】

    原文链接:http://www.jb51.net/shouji/359262.html 日常我们使用手机,SIM卡是手机的必须,没有了它就不能接入网络运营商进行通信服务.SIM卡作为网络运营商对于我们 ...

  4. wpf 验证方法

    效果图,当放鼠标到文本框上会显示出错的提示.

  5. 【swaggerui】swaggerui在asp.net web api core 中的应用

    Swaggerui 可以为我们的webapi提供美观的在线文档,如下图: 实现步骤: NuGet Packages  Install-Package Swashbuckle.AspNetCore 在s ...

  6. JAVA的泛型与反射的联合应用

    通过泛型与反射的结合,可以编写框架来使开发更容易,这里演示的是BaseDao部分的简单使用. BaseDao部分代码: public abstract class BaseDao<T>{ ...

  7. [NOI2009]管道取珠 DP + 递推

    ---题面--- 思路: 主要难点在思路的转化, 不能看见要求$\sum{a[i]^2}$就想着求a[i], 我们可以对其进行某种意义上的拆分,即a[i]实际上可以代表什么? 假设我们现在有两种取出某 ...

  8. 洛谷 P4964 绫小路的特别考试 解题报告

    P4964 绫小路的特别考试 题目背景 这世界上「胜利」便是一切.无关乎过程. 要付出多少牺牲都无所谓.只要最后我「胜出」那就行了. 题目描述 一场新的特别考试来临了,这次的考试内容是(wan e d ...

  9. MyBatis之二级缓存

    二级缓存与一级缓存区别:二级缓存的范围更大,多个sqlSession可以共享一个UserMapper的二级缓存区域. 每一个mapper都有一个自己的二缓存区域(按namespace区分),两个map ...

  10. libudev使用说明书

    转http://blog.csdn.net/coroutines/article/details/38067805 1. 初始化 首先调用udev_new,创建一个udev library conte ...