继承与委托

在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,可动态变化

 

 

总而言之,委派和继承都是为了代码复用,只是方式不同。

  • 委托可以被看作是对象级别的重用机制,而继承是类级别的重用机制。
  • 此外,如果子类只需要复用父类中的一小部分方法,可以不需 要使用继承,而是通过委派机制来实现
posted @ 2022-06-12 16:14  HITyfj  阅读(305)  评论(0)    收藏  举报