効果的な Javaを読んで、次の例を から見ましたItem 16: Favor composition over inheritance
。
以下の本では、要素が(変数InstrumentedSet
を介して)挿入された回数を追跡できることを示しています。InstrumentedSet.addCount
これを行うには、このクラス オブジェクトの を単純に追加し、実際のクラスの の実際の実装をaddCount
呼び出すを呼び出します。ForwardingSet.add()
Set
add()
// Reusable forwarding class
public class ForwardingSet<E> implements Set<E> {
private final Set<E> s;
public ForwardingSet(Set<E> s) { this.s = s; }
public void clear() { s.clear(); }
public boolean contains(Object o) { return s.contains(o); }
...
}
// Wrapper class - uses composition in place of inheritance
public class InstrumentedSet<E> extends ForwardingSet<E> {
private int addCount = 0;
public InstrumentedSet(Set<E> s) { super(s); }
@Override public boolean add(E e) {
addCount++;
return super.add(e);
}
...
}
このパターン/アプローチを使用するには、クラスがその親クラスのすべてForwarding*
のメソッド (この場合)を呼び出す必要があることを理解していますか?Set