猎人打猎(二)----利用继承
上一篇文章中虽然实现了猎人打猎这一行为,但是分析一下,猎人是人,枪是武器,猎物可以是很多种的动物,打猎也不可能仅仅就抓住一种猎物不放。所以在这里利用继承来实现
结构
分析
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());}
}
结果
猎人张三开始打猎了!
猎人发现了大老虎
啊啊啊,打死了大老虎
老虎状态:死的
总结:继承实现了程序的可重用新和可扩展性,而且代码看起类更明朗,灵活性强
猎人打猎(二)----利用继承相关推荐
- Winform打砖块游戏制作step by step第5节---重构代码,利用继承多态
一 引子 为了让更多的编程初学者,轻松愉快地掌握面向对象的思考方法,对象继承和多态的妙用,故推出此系列随笔,还望大家多多支持. 二 本节内容---重构代码,利用继承多态 1. 主界面截图如下: 2. ...
- Java中 利用继承的思想实现动物的分类,将动物分为水生动物和陆生动物,有其动物的属性和特征,又有其属性和特征,编程模拟。
Java中 利用继承的思想实现动物的分类,将动物分为水生动物和陆生动物,有其动物的属性和特征,又有其属性和特征,编程模拟. 前言 动物在拥有自己本身所具有的特征的同时,还应该具有所在大类所具有的动物特 ...
- matlab 方波_MATLAB之Simulink(二)利用switch模块将正弦信号变为方波信号
##MATLAB之Simulink(二) ##利用switch模块将正弦信号变为方波信号 今天给大家展示一个simulink电路仿真,将正弦信号转化为方波信号. 下面开始教程: 1.首先直接在MATL ...
- C#面向对象三大特性之二:继承
面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低了耦合. 但在实际应用中,有好多对象具有相同或者相似的属性,比如有一个对象 果树 ...
- 利用MATLAB进行系统时域分析,实验二 利用matlab进行系统的时域分析
实验二 利用matlab进行系统的时域分析 实验二 利用MATLAB进行系统的时域分析 1.实验目的 在理论学习的基础上,通过本实验熟悉LTI连续时间系统的时域分析方法, 熟悉系统的零输入响应.零状态 ...
- Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...
Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰 ...
- matlab simulink_MATLAB之Simulink(二)利用switch模块将正弦信号变为方波信号
##MATLAB之Simulink(二) ##利用switch模块将正弦信号变为方波信号 今天给大家展示一个simulink电路仿真,将正弦信号转化为方波信号. 下面开始教程: 1.首先直接在MATL ...
- 利用继承和组合实现软件复用
利用继承实现软件复用 1 class Animal 2 { 3 private String type; 4 public Animal(String type){ 5 this.type = typ ...
- JavaScript学习(五十二)—继承、call方法和apply方法
JavaScript学习(五十二)-继承.call方法和apply方法 学习内容 一.继承 二.call方法 三.apply方法 一.继承 所谓继承就是两个构造方法建立起来的某种联系,通过某种联系,可 ...
最新文章
- delphi解决:Thread error 拒绝访问(5)
- 7 个致命的 Linux 命令
- ITK:过滤器Filter和ParallelizeImageRegion比较
- Zookeeper集群角色分配原理
- 京东联合vivo针对vivo X Note推出先行者计划
- i7 6700k linux,i7-6700k超频至4.8G最稳定 i7-6700K开盖液态金属测试
- public 返回一数组_数组:滑动窗口拯救了你
- 【中山市选2009】【BZOJ2463】谁能赢呢?
- html js把json转化为excel,json转换Excel
- 被裁员工公开呛声IBM人工智能,有双好鞋却不知怎么走路
- 项目管理十大知识领域和47个过程
- 示波器电流探头传播延迟的测量
- 基于MATLAB的指纹识别系统仿真设计,基于Matlab的指纹识别系统的研究与实现
- Linux 系统编程-文件IO-文件描述符、open函数的使用、实现touch命令
- One or more files are in a conflicted state——解决代码冲突
- 开源硬件童芯派了解一下?一个真创客聊聊开源硬件
- 以太坊区块链浏览器(二)开发
- Java猜数字大小游戏
- 杂谈:饮水思源与Java仍在但Sun已死
- 介绍计算机配置的英语作文,用英语描述一个电脑的最新配置