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 ]
[
下一页 ]