Inheritance vs. Delegation
本问题已经有最佳答案,请猛点这里访问。
下面的代码显示了继承如何重用方法m()。代表团如何工作?谢谢!
1 2 3 4 5 6 7 8 | class A{ int m(); } class B extends A{} B b =new B() b.m(); |
继承意味着是-a:"B类的一个实例是-a类的一个实例"。
组合是指has-a:"b类的一个实例has-a类的一个实例"。
这样地:
1 2 3 4 5 6 7 8 | class B { private A a; public B(A a) { this.a = a; } public int m() { return a.m(); } } |
类B将其对m()的调用委托给它的类A实例。
如果两者都实现了一个公共接口,这会有所帮助。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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(); } } |
1 2 3 4 5 | class B { int m() { return new A().m(); } } |
或
1 2 3 4 5 6 | class B { private A a = new A(); int m() { return a.m(); } } |
或
1 2 3 4 5 6 7 8 9 10 11 | class B { private A a; public B(A a) { this.a = a; } int m() { return a.m(); } } |