上一篇文章中虽然实现了猎人打猎这一行为,但是分析一下,猎人是人,枪是武器,猎物可以是很多种的动物,打猎也不可能仅仅就抓住一种猎物不放。所以在这里利用继承来实现

结构

分析

1. 在继承中,被继承类中属性修饰符不能再是private,应该改成 protected
2.  子类Tiger继承自父类Animal,Animal实现了方法 death(),以后只要是动物都可以继承父类并重写方法death()
3.  子类Hunter继承自父类People,但子类还有自己的方法shoot(Animal animal, Gun gun); 以后如果还有新的Animal子类,此方法同样可以使用

代码

Animal.java

package com.a.po;public class Animal {protected String name ; //此时属性修饰符为protected,允许子类调用,当然同一包中的类可以调用(可以把猎人,武器,猎物分别放在不同包中,这样就可以保证外界不能直接访问这个属性),声明一下不同包中子类同样可以调用protected String state ;public Animal() {} //无参构造/*** @param name* @param state* 构造方法*/public Animal(String name, String state) {this.name = name;this.state = state;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getState() {return state;}public void setState(String state) {this.state = state;}/*** 动物都有的一个行为“死”,可以出现在父类中,被子类继承*/public void death() {state = "死的";}
}

Tiger.java

package com.a.po;public class Tiger extends Animal {public Tiger(String name, String state) {super(name, state);}/*** 猎物的一个行为*/public void death() {state = "死的";}
}

Gun.java

package com.a.po;public class Gun {/*** @param animal* @return animal 返回一个Animal类型的animal,即猎人打死的猎物*/public Animal peng(Animal animal) {System.out.println("啊啊啊,打死了" + animal.getName());animal.death();return animal;}
}

People.java

package com.a.po;public class People {protected String name;public People(String name) {super();this.name = name;}public String getName() {return name;}public void setName(String name) {this.name = name;} }

Hunter.java

package com.a.po;public class Hunter extends People {private Animal animal;/*** @param name* 由于继承自父类,父类的构造方法需要重写,且第一行必须为super(...)之类的,子类如果有自己*/public Hunter(String name) { super(name);}public Animal getAnimal() {return animal;}public void setAnimal(Animal animal) {this.animal = animal;}public void shoot(Animal animal, Gun gun) {gun.peng(animal);}
}

Test.java

package com.a.test;import com.a.po.Animal;
import com.a.po.Gun;
import com.a.po.Hunter;
import com.a.po.Tiger;public class Test {public static void main(String[] args) {Hunter hunter = new Hunter("张三");Gun gun = new Gun();Tiger tiger = new Tiger("大老虎", "活的");System.out.println("猎人" + hunter.getName() + "开始打猎了!");System.out.println("猎人发现了" + tiger.getName());hunter.shoot(tiger, gun);System.out.println("老虎状态:" + tiger.getState());}
}

结果

猎人张三开始打猎了!
猎人发现了大老虎
啊啊啊,打死了大老虎
老虎状态:死的

总结:继承实现了程序的可重用新和可扩展性,而且代码看起类更明朗,灵活性强

猎人打猎(二)----利用继承相关推荐

  1. Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态

    一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2.  ...

  2. Java中 利用继承的思想实现动物的分类,将动物分为水生动物和陆生动物,有其动物的属性和特征,又有其属性和特征,编程模拟。

    Java中 利用继承的思想实现动物的分类,将动物分为水生动物和陆生动物,有其动物的属性和特征,又有其属性和特征,编程模拟. 前言 动物在拥有自己本身所具有的特征的同时,还应该具有所在大类所具有的动物特 ...

  3. matlab 方波_MATLAB之Simulink(二)利用switch模块将正弦信号变为方波信号

    ##MATLAB之Simulink(二) ##利用switch模块将正弦信号变为方波信号 今天给大家展示一个simulink电路仿真,将正弦信号转化为方波信号. 下面开始教程: 1.首先直接在MATL ...

  4. C#面向对象三大特性之二:继承

    面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低了耦合. 但在实际应用中,有好多对象具有相同或者相似的属性,比如有一个对象 果树 ...

  5. 利用MATLAB进行系统时域分析,实验二 利用matlab进行系统的时域分析

    实验二 利用matlab进行系统的时域分析 实验二 利用MATLAB进行系统的时域分析 1.实验目的 在理论学习的基础上,通过本实验熟悉LTI连续时间系统的时域分析方法, 熟悉系统的零输入响应.零状态 ...

  6. Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...

    Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰 ...

  7. matlab simulink_MATLAB之Simulink(二)利用switch模块将正弦信号变为方波信号

    ##MATLAB之Simulink(二) ##利用switch模块将正弦信号变为方波信号 今天给大家展示一个simulink电路仿真,将正弦信号转化为方波信号. 下面开始教程: 1.首先直接在MATL ...

  8. 利用继承和组合实现软件复用

    利用继承实现软件复用 1 class Animal 2 { 3 private String type; 4 public Animal(String type){ 5 this.type = typ ...

  9. JavaScript学习(五十二)—继承、call方法和apply方法

    JavaScript学习(五十二)-继承.call方法和apply方法 学习内容 一.继承 二.call方法 三.apply方法 一.继承 所谓继承就是两个构造方法建立起来的某种联系,通过某种联系,可 ...

最新文章

  1. delphi解决:Thread error 拒绝访问(5)
  2. 7 个致命的 Linux 命令
  3. ITK:过滤器Filter和ParallelizeImageRegion比较
  4. Zookeeper集群角色分配原理
  5. 京东联合vivo针对vivo X Note推出先行者计划
  6. i7 6700k linux,i7-6700k超频至4.8G最稳定 i7-6700K开盖液态金属测试
  7. public 返回一数组_数组:滑动窗口拯救了你
  8. 【中山市选2009】【BZOJ2463】谁能赢呢?
  9. html js把json转化为excel,json转换Excel
  10. 被裁员工公开呛声IBM人工智能,有双好鞋却不知怎么走路
  11. 项目管理十大知识领域和47个过程
  12. 示波器电流探头传播延迟的测量
  13. 基于MATLAB的指纹识别系统仿真设计,基于Matlab的指纹识别系统的研究与实现
  14. Linux 系统编程-文件IO-文件描述符、open函数的使用、实现touch命令
  15. One or more files are in a conflicted state——解决代码冲突
  16. 开源硬件童芯派了解一下?一个真创客聊聊开源硬件
  17. 以太坊区块链浏览器(二)开发
  18. Java猜数字大小游戏
  19. 杂谈:饮水思源与Java仍在但Sun已死
  20. 介绍计算机配置的英语作文,用英语描述一个电脑的最新配置

热门文章

  1. 东邪、西毒、南帝、北丐、中神通五大操作系统之华山论剑(独评)
  2. dns劫持 tplink_解决路由器DNS劫持的两种方法
  3. 浏览器推荐-以Windows操作系统为例
  4. 【软件工具篇01】如何用思维导图构建自己的知识体系
  5. 【python】python代码实现多张图片合成视频
  6. 融合知识图谱和用户行为信息的个性化推荐算法研究
  7. 最简单的Java设计模式
  8. 如何建立Multi-Step(多步预测)的LSTM时间序列模型(以对家庭用电预测为例)
  9. 2021年危险化学品经营单位安全管理人员考试及危险化学品经营单位安全管理人员试题及解析
  10. 自学整理之HTML5常用标签和知识——小白篇