item 18) 상속보다는 컴포지션을 사용하라
상속의 문제점
캡슐화를 깨뜨리는 상속
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);
}
@Override public boolean addAll (Collection< ? extends E > c){
addCount += c.size();
return super.addAll(c);
}
}상위 클래스에 새로운 메서드를 추가했을 때
하위클래스에 추가한 메서드가 상위 클래스 새 릴리즈에서 추가된 메서드와 같은 시그니처를 가지고 다른 반환 타입을 가질 때
컴포지션 설계
ForwardingSet 클래스
InstrumentedSet 클래스
Last updated