编写一个Soldier类,描述具有普遍行为和属性的一个士兵对象。

编写陆军士兵、海军士兵、军官类来扩展Soldier类。

设计Soldier类的相关属性和方法。

建模几个陆军士兵、海军士兵、军官类来继承Soldier类,增加各自特有的属性和方法并重写相应的方法。

  1. public class SoldierDemo {
  2.  
  3. public static void main(String[] args) {
  4. // TODO Auto-generated method stub
  5.  
  6. Leader leader = new Leader("leader");
  7. leader.CallToAttack();//全体进攻
  8. System.out.println("*****************************");
  9. leader.CallToAttack(leader.getSoldiers()[0]);//只让一个士兵进攻
  10. System.out.println("*****************************");
  11. leader.CallToAttack(leader);//只让指挥官进攻
  12. }
  13.  
  14. }
  15.  
  16. abstract class Soldier{
  17. private String name;
  18. public Soldier(String name) {
  19. this.name = name;
  20. }
  21.  
  22. public String getName() {
  23. return name;
  24. }
  25.  
  26. public void ready() {
  27. System.out.println("准备作战");
  28. }
  29.  
  30. public void end() {
  31. System.out.println("战斗结束");
  32. }
  33.  
  34. abstract void attack();
  35.  
  36. public void action() {//行动模板
  37. ready();
  38. attack();
  39. end();
  40. }
  41. }
  42.  
  43. class LandSoldier extends Soldier{
  44.  
  45. public LandSoldier(String name) {
  46. super(name);
  47. }
  48.  
  49. public void attack() {
  50. System.out.println("陆军士兵"+getName()+"开始攻击");
  51. }
  52. }
  53.  
  54. class OceanSoldier extends Soldier{
  55.  
  56. public OceanSoldier(String name) {
  57. super(name);
  58. }
  59.  
  60. public void attack() {
  61. System.out.println("海军士兵"+getName()+"开始攻击");
  62. }
  63. }
  64.  
  65. class Leader extends Soldier{
  66.  
  67. private Soldier[] soldiers = new Soldier[2];//指挥官持有两个士兵
  68.  
  69. public Leader(String name) {
  70. super(name);
  71. soldiers[0] = new LandSoldier("张三");
  72. soldiers[1] = new OceanSoldier("李四");
  73. }
  74.  
  75. public Soldier[] getSoldiers() { //外界可以调用这两个士兵
  76. return soldiers;
  77. }
  78.  
  79. public void attack() {
  80. System.out.println("指挥官"+getName()+"开始攻击");
  81. }
  82.  
  83. //全体士兵进攻
  84. public void CallToAttack() {
  85. for(int i = 0;i<soldiers.length;i++) {
  86. soldiers[i].action();
  87. }
  88. this.action();
  89. }
  90.  
  91. //只让一个士兵进攻
  92. public void CallToAttack(Soldier soldier) {
  93. soldier.action();
  94. }
  95.  
  96. }

  

java多态抽象类实例的更多相关文章

  1. Java面向对象抽象类实例练习

    abstract class Animal { abstract void eat(); } class Cat extends Animal { void eat() { System.out.pr ...

  2. Java第十二次作业:继承与抽象类解决工人与学生的问题,抽象类实例。抽象类作用——为多态创造了可能。抽象类的作用总结

    继承与抽象类解决工人与学生的问题 抽象类实例 package com.swift; public abstract class Person { private String name; privat ...

  3. [ Java学习基础 ] Java的抽象类与接口

    一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...

  4. Java-Runoob-面向对象:Java 多态

    ylbtech-Java-Runoob-面向对象:Java 多态 1.返回顶部 1. Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操 ...

  5. 构建后端第6篇之---java 多态的本质 父类引用 指向子类实现

    张艳涛写于2021-2-20 今天来个破例了,不用英文写了,今天在家里电脑写的工具不行,简单的说 主题是:java多态的原理与实现 结论是:java的多态 Father father= new Son ...

  6. Java 多态——与C++的比较

    学习了Java和C++之后,由于长期不使用C++,而java的基础知识掌握不牢,现在已经搞不清java多态了.现在先来谈谈java多态,稍后有时间再更新C++的多态,并进行比较~ 一. Java的多态 ...

  7. C++和java多态的区别

    C++和java多态的区别 分类: Java2015-06-04 21:38 2人阅读 评论(0) 收藏 举报  转载自:http://www.cnblogs.com/plmnko/archive ...

  8. 深入理解Java多态机制

    从字节码层面来看,Java中的所有方法调用,最终无外乎转换为如下几条调用指令. invokestatic: 调用静态方法. invokespecial: 调用实例构造器<init>方法,私 ...

  9. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

随机推荐

  1. audio标签的自动播放(ios)

    0.应用场景 前端移动端开发,经常有播放音乐的需求.比如我有公司做过类似支付宝的年度账单,功能是用户在查看年度账单的过程中播放轻音乐. 1.audio标签播放mp3 (一)常用属性和API介绍 1.c ...

  2. LINQ-from多from

    简: LINQ全称是Language  Integrated Query,中文“语言集成查询”.LINQ是一种查询技术,有LINQ toSQL.LINQ to Object. LINQ to ADO. ...

  3. spring security认证

    1 开发基于表单的认证 Spring security核心的功能 认证(你是谁?) 授权(你能干什么?) 攻击防护(防止伪造身份) spring security实现了默认的用户名+密码认证,默认用户 ...

  4. 【12】FtpWebRequest上传下载

    下载文件 /// <summary> /// 下载文件 /// </summary> /// <param name="filename">&l ...

  5. 一键安装lamp环境出现的问题

    前言:之前安装lamp是独立安装的,安装扩展很方便,现在用这个一键安装包,不知道怎么样,尝试一把. Part1:安装过程中出现的问题 error: utf8_mime2text() has new s ...

  6. 阿里云服务器windows server流量不大的情况下,tomcat经常出现访问阻塞,手动ctrl+c或者点击右键又访问正常

    我被这个问题折磨了好几天,因为这两天要帮别人做推广,不能再出现这样的情况了,不然广告费就白烧了,所以特意查了一下资料,结果解决方案被我找出来了. 问题发生原因是因为打开编辑选项后,一不小心点到dos窗 ...

  7. spring源码学习(一)

    由于本人水平有限,本文内容较为简单,仅供个人学习笔记,或者大家参考,如果能够帮助大家,荣幸之至!本文主要分析AnnotationConfigApplicationContext实例化之后,到底干了那些 ...

  8. Golang把所有包括底层类库,输出到stderr的内容, 重新定向到一个日志文件里面?

    不论应用是如何部署的,我们都期望能扑捉到应用的错误日志, 解决思路: 自己写代码处理异常拦截,甚至直接在main函数中写异常拦截. stderr重定向到某个文件里 使用 syscall.Dup2 第一 ...

  9. HDU 2955(01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 这道题求不被抓时的最大金钱.金额是整数,概率是小数.因为数组小标不能是小数,所以我们可以以钱作为weigh ...

  10. HDU P2089

    题目大意为,统计区间内不含4和62的数字的个数: 老实说,看到这题我是抵触的..... 基本上是数位DP的板子,话说数位DP好像全是模板题吧: 预处理,有关的整区间的数字个数: 调用已有的区间,求解0 ...