继承与委托

Inheritance vs. Delegation

下面的代码显示了如何通过继承重用方法 m()。委派如何运作?谢谢!

  class A{
  int m();
  }

 class B extends A{}

 B b =new B()
 b.m();
class B {
    int m() {
        return new A().m();
    }
}

class B {
    private A a = new A();
    int m() {
        return a.m();
    }
}

class B {
    private A a;

    public B(A a) {
        this.a = a;
    }

    int m() {
        return a.m();
    }
}

继承意味着 IS-A:"An instance of class B IS-A instance of class A"。

成分表示 HAS-A:"An instance of class B HAS-A instance of class A"。

像这样:

class B {

    private A a;

    public B(A a) { this.a = a; }

    public int m() { return a.m(); }
}

Class B 将其对 m() 的调用委托给其 class A 的实例。

如果两者都实现一个公共接口会有所帮助。

public interface DoSomething {
    int m();
}

class A implements DoSomething {
    public int m() { return 1; }
}

class B implements DoSomething {

    private A a;

    public B(A a) { this.a = a; }

    public int m() { return a.m(); }
}