1.Client端的访问时面向接口的。这样能使程序应对不同的实现。
2.假设Client端使用一个vehicle,意思是交通工具。Client端调用该接口的run()。实现交通工具的“跑”功能。
3.现在有个Car类。该类和vehicle没有关系。但是也提供了run()方法,用于“小汽车跑起来”。
现在要将Car作为vehicle的一个“实现类”。实际上不上真正的实现,而是由一个“中介”,作用是能提供vehicle的实例,同时包含Car。
现在就要这样做:
<pre name="code" class="java">class CarAdapter Implements vehicle{//提供vehicle的实例
private Car car;
public void run(){
//小汽车跑
car.run();
//还可以控制小汽车跑的其他方面
}
public CarAdapter(Car c){
car = c;//提供个构造方法来初始化。
}
}.
这样在Client端就可以保持一个vehicle访问形式不变,使用并控制Car提供的功能。
类似这样:
//前面的一些代码,一直在使用vehicle做事情
vehicle=new CarAdapter(new Car());//现在要用一个Car做些事情,但是不能“整容”,否则后面的代码不认识
//仍然使用vehicle做些事情
小结:
适配是为了转型,转型就要用到继承,内部封装“被转型”类。