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

经验分享 程序员 微信小程序 职场和发展