继承与委托
在java中,继承与委托都是用来加强代码的复用性,只是两者的方式不同
- 委托:一个对象请求另一个对象的功能,捕获一个操作并将其发送到另一个对象。
- 继承:利用extends来扩展一个基类。
委托依赖于动态绑定,因为它要求特定的方法可以在运行时调用不同的代码段,可以看下面代码:
public class A { void foo() { this.bar(); } void bar() { System.out.println("a.bar"); } } public class B { private A a; public B(A a) { this.a = a; } void foo() { a.foo(); // call foo() on the a-instance } } void bar() { System.out.println("b.bar"); } }
这是一种简单的委托关系,可以看到A与B并没有那种“父与子”的关系,仅仅是B借用了A的方法,从中可以看出,这种方式适用于A与B公用的方法不多
如果说继承是垂直结构,那么委托是横向结构。
而委托内部也有不同的分类

Dependency:两个类之间的这种关系被称为“use-a”关系,在这个关系中,一个类使用另一个类而没有实际上将其作为一个属性合并。
Association:永久性的委托,对象类之间的持久关系,允许一个对象实例导致另一个对象实例代表它执行操作。
Composition:更强的association,但难以变化
Aggregation:更弱的association,可动态变化
总而言之,委派和继承都是为了代码复用,只是方式不同。
- 委托可以被看作是对象级别的重用机制,而继承是类级别的重用机制。
- 此外,如果子类只需要复用父类中的一小部分方法,可以不需 要使用继承,而是通过委派机制来实现

浙公网安备 33010602011771号