打字猴:1.700454687e+09
1700454687
1700454688 子类当然可以有自己的行为和外观了,也就是方法和属性,那这里为什么要再提呢?是因为里氏替换原则可以正着用,但是不能反过来用。在子类出现的地方,父类未必就可以胜任。还是以刚才的关于枪支的例子为例,步枪有几个比较“响亮”的型号,比如AK47、AUG狙击步枪等,把这两个型号的枪引入后的Rifle子类图如图2-4所示。
1700454689
1700454690
1700454691
1700454692
1700454693 图2-4 增加AK47和AUG后的Rifle子类图
1700454694
1700454695 很简单,AUG继承了Rifle类,狙击手(Snipper)则直接使用AUG狙击步枪,源代码如代码清单2-7所示。
1700454696
1700454697 代码清单2-7  AUG狙击枪源码代码
1700454698
1700454699 public class AUG extends Rifle{
1700454700
1700454701 //狙击枪都携带一个精准的望远镜
1700454702
1700454703 public void zoomOut(){
1700454704
1700454705 System.out.println(“通过望远镜察看敌人……”);
1700454706
1700454707 }
1700454708
1700454709 public void shoot(){
1700454710
1700454711 System.out.println(“AUG射击……”);
1700454712
1700454713 }
1700454714
1700454715 }
1700454716
1700454717 有狙击枪就有狙击手,狙击手类的源代码如代码清单2-8所示。
1700454718
1700454719 代码清单2-8  AUG狙击手类的源码代码
1700454720
1700454721 public class Snipper{
1700454722
1700454723 public void killEnemy(AUG aug){
1700454724
1700454725 //首先看看敌人的情况,别杀死敌人,自己也被人干掉
1700454726
1700454727 aug.zoomOut();
1700454728
1700454729 //开始射击
1700454730
1700454731 aug.shoot();
1700454732
1700454733 }
1700454734
1700454735 }
1700454736
[ 上一页 ]  [ :1.700454687e+09 ]  [ 下一页 ]