组合:希望一个类A有另一个类B的功能
1.让类A继承B 不建议这么做。原因:
①不符合面向对象的思想(继承是典型的is a关系,A(人)是B(鸟)不合理)
②java是单继承(A继承了B之后就不能继承其他的类了,不灵活)
2.使用组合:把一个类型的对象作为字段声明在另一个类中class A{
B b;
public void fly(){
b.fly();
}
}
ex:
class Test{
public static void main(String[] arg){
B b = new B();
A a = new A(b);
a.fly(); //我会飞...
}
}
class B{
public void fly(){
System.out.println("我会飞...");
}
}
class A {
B b;//把B类型的对象作为字段声明在A类中,就形成了组合关系。 可以理解为A有飞的能力。 是 has-a 关系
public A(B b){//使用构造方法给B赋值。不是必须的
this.b = b;
}
public void run(){
System.out.println("我会跑...");
}
public void fly(){//A本身有fly功能
b.fly();//方法的实现是调用B的fly功能
}
}
运行结果图: