java实验3.(4)组合的使用例子
4、(选做)继承性可以表示is-a(完全继承基类的属性)或is-like-a(增加了自己的属性)的关系,而组合可以表示has的关系。例如,一辆Car有(has)四个轮子(Wheels)和一个发动机(Engine)。现在用组合方法要求设计类Car、类Wheel和类Engine(每个类采用一个独立文件保存),其中Car类有入口方法main():
(1) 类Engine用属性type记录发动机的型号,用方法start()启动引擎(显示下面示例中包含start的字符串)。
代码如下:
public class Engine extends Car{
String type="Mode L";
Engine(String model, String[] wheels, String engine) {
super(model, wheels, engine);
// TODO Auto-generated constructor stub
}
Engine(String type){
super(type);
this.type=type;
}
void start(){
System.out.println("Engine<"+type+"> starts!");
}
}
(2) 类Wheel用属性type记录轮胎的型号,整数类型属性index记录当前轮胎编号(1-前左,2-前右,3-后左,4-后右),用方法roll()表示轮胎正在转动(显示下面示例中包含rolling的字符串),代码如下:
public class Wheel extends Car{
String type;
int index=0;
Wheel(String model, String[] wheels, String engine) {
super(model, wheels, engine);
// TODO Auto-generated constructor stub
}
public Wheel(String type,int index) {
super();
this.type=type;
this.index=index;
// TODO Auto-generated constructor stub
}
void roll(){
System.out.println("Wheel "+index+"<"+type+"> is rolling");
}
}
(3) 类Car有属性model记录轿车的型号,还要有属性wheels[]和engine,其构造函数的参数是轮胎型号(四个轮胎的型号初始都是一样)、轿车的型号和发动机的型号,有一个方法changeWheel可以改变指定轮胎的型号,还有一个方法start方法一开始显示firing(显示下面示例中包含firing的字符串),然后调用engine的start(),再调用所有轮胎的roll(),最后显示running,代码如下:
public class Car {
String model;
String[] wheels;
String engine;
Car(String model,String[] wheels,String engine){
this.model=model;
this.wheels=wheels;
this.engine=engine;
}
Car(String engine){
this.engine=engine;
}
Car(){
}
Car(String[] wheels){
this.wheels=wheels;
}
void changeWheel(int index,String str){
wheels[index]=str;
}
void start(){
System.out.println("Car<"+model+"> is firing!");
}
public static void main(String[] args){
String[] wheels={"BridgeStone","BridgeStone","BridgeStone","BridgeStone"};
String model="BMW";
String engine="Mode L";
Car car=new Car(model,wheels,engine);
car.start();
car=new Engine(engine);
car.start();
for(int i=0;i<4;i++){
car=new Wheel(wheels[i],i+1);
((Wheel) car).roll();
}
System.out.println("Car "+model+" is running");
System.out.println("=================");
String[] wheels1={"Michelin","Michelin"
,"Michelin","BridgeStone"};
String model1="Mercedes-Benz";
String engine1="Model S";
Car car1=new Car(model1,wheels,engine1);
car1.start();
car1=new Engine(engine);
car1.start();
for(int i=0;i<4;i++){
car1=new Wheel(wheels1[i],i+1);
((Wheel) car1).roll();
}
System.out.println("Car "+model1+" is running");
}
}
运行结果如下:
Car<BMW> is firing! Engine<Mode L> starts! Wheel 1<BridgeStone> is rolling Wheel 2<BridgeStone> is rolling Wheel 3<BridgeStone> is rolling Wheel 4<BridgeStone> is rolling Car BMW is running ================= Car<Mercedes-Benz> is firing! Engine<Mode L> starts! Wheel 1<Michelin> is rolling Wheel 2<Michelin> is rolling Wheel 3<Michelin> is rolling Wheel 4<BridgeStone> is rolling Car Mercedes-Benz is running
