class Plane{
public void fly(){}
}
class Ship{
public void swim(){}
}
//优先使用对象组合而不是继承
class ManKind {
private Plane p = new Plane();
private Ship s = new Ship();
public void fly(){
p.fly();
}
public void swim(){
s.swim();
}
}
//交通工具接口
interface Vehicle{
public void run();
}
//自行车实现类
class Bike implements Vehicle{
public void run(){
System.out.println("骑单车行走");
}
}
//汽车实现类
class Car implements Vehicle{
public void run(){
System.out.println("开汽车行走");
}
}
//人类--------对接口编程而不是对实现编程。
class CDMan {
private Vehicle v;
public void run(){
v.run();
}
//更换交通工具
public void changeVehicle(Vehicle v){
this.v = v;
}
}
……
CDMan c = new CDMan();
//使用组合可解决继承无法动态复用问题
c.changeVehicle(new Bike());
c.run();//骑单车行走
c.changeVehicle(new Car());
c.run();//开汽车行走
- 无法通过继承达到多个类代码的重用。
- 父类的方法子类无条件继承,很容易造成方法污染。
- 从父类中继承的方法,是一种静态的复用。不能在运行时发生改变,不够灵活。