6.10 实战练习
1.使用面向对象的思想设计以下类结构。
(1)人口类:抽象类
实例变量:生命值、攻击力、占用人口个数
方法:进攻(抽象方法)
子类:农民、机枪兵、坦克、飞机
(2)建筑类:抽象类
实例变量:生命值
方法:创建人口(抽象方法)
子类:指挥中心(创建农民)、兵营(创建机枪兵)、工厂(创建坦克)、飞机场(创建飞机)
2.按以下要求给出你的类结构设计。
(1)定义一个接口Assaultable(可攻击的),该接口有一个抽象方法attack()。
(2)定义一个接口Mobile(可移动的),该接口有一个抽象方法move()。
(3)定义一个抽象类Weapon,实现Assaultable接口,但并没有给出方法的具体实现。
(4)定义三个类:Tank、Flighter、MissileTurret,它们都继承自Weapon,分别给出attack()方法的不同实现;Tank和Flighter类还实现了Mobile接口,也给出move()方法的不同实现。
(5)写一个类Army,代表一支军队,这个类有一个实例变量Weapon数组w(用来存储该军队所拥有的所有武器);该类还提供一个构造方法,通过传一个int类型的参数来限定该类所能拥有的最多的武器数量,并用该参数来初始化数组w的容量;该类还提供一个方法addWeapon(Weapon wp),表示把参数wp所代表的武器加入数组w中;在这个类中还定义两个方法,其中attackAll()让w数组中的所有武器攻击,moveAll()让w数组中的所有可移动的武器移动。
(6)写一个main方法测试上述程序。
3.编写程序模拟汽车装配发动机。
(1)设计一个发动机接口(IEngine),需要提供如下功能:
● 启动(start)
● 停止(stop)
● 加速(speedup)
提示:设计接口的意义在于,只要发动机实现了这些功能,就可以装配到汽车上。
(2)设计两个发动机实现上述功能。
第一个发动机叫"YAMAHA",实现功能:
A.启动方法中显示"YAMAHA启动,速度60"。
B.停止方法中显示"YAMAHA停止,速度0"。
C.加速方法中显示"YAMAHA加速,速度80"。
第二个发动机叫"HONDA",实现功能:
A.启动方法中显示"HONDA启动,速度40"。
B.停止方法中显示"YAMAHA停止,速度0"。
C.加速方法中显示"YAMAHA加速,速度120"。
(3)设计一个汽车类(Car),汽车应该有一个成员变量是代表发动机的(思考一下,应该用IEngine、YAMAHA还是HONDA作为成员变量)。编写一个方法testEngine(),用于测试发动机的性能,测试的内容主要有:
A.测试发动机启动
B.测试发动机启动
C.测试发动机停止
(4)在现实中,我买了一辆车(提示:在main方法中新建一个汽车类),首先把一个YAMAHA的发动机装在了汽车上(提示:新建一个YAMAHA对象),然后测试一下发动机(提示:调用testEngine方法)。然后发现我不喜欢YAMAHA的发动机,于是换了一个HONDA的发动机,重新测试一下。
(5)思考以下两个问题:
A.如果发动机不采用接口的方式,该怎样设计这个模型?
B.读者可以尝试着给自己的汽车装上不同样式的车门。