7

効果的な Javaを読んで、次の例を から見ましたItem 16: Favor composition over inheritance

以下の本では、要素が(変数InstrumentedSetを介して)挿入された回数を追跡できることを示しています。InstrumentedSet.addCount

これを行うには、このクラス オブジェクトの を単純に追加し、実際のクラスの の実際の実装をaddCount呼び出すを呼び出します。ForwardingSet.add()Setadd()

// 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

4

2 に答える 2