继承与委托
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(); }
}
下面的代码显示了如何通过继承重用方法 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(); }
}