继承与委派

时间:2017-06-06 13:04:51

标签: java inheritance delegation

下面的代码显示了如何通过继承重用方法m()。如何为代表团工作?谢谢!

  class A{
  int m();
  }

 class B extends A{}

 B b =new B()
 b.m();

2 个答案:

答案 0 :(得分:2)

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();
    }
}

答案 1 :(得分:2)

继承意味着IS-A:“B类的实例IS-A类的实例”。

组合意味着HAS-A:“B类HAS的实例 - A类的实例”。

像这样:

class B {

    private A a;

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

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

B类将对m()的调用委托给它的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(); }
}