/**
* CustomHashSet.java
*/
public class CustomHashSet<E> extends HashSet<E> {
private int addCount = 0;
public CustomHashSet() {}
public CustomHashSet(int initNum, float factorNum) {
super(initNum, factorNum);
}
@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);
}
public int getAddCount() {
return addCount;
}
}
/**
* Test.java
*/
public class Test {
public static void main(String[] args) {
CustomHashSet<String> chs = new CustomHashSet<String>();
chs.addAll(Arrays.asList("JAVA", "IS", "DIFFICULT"));
System.out.println(chs.getAddCount());
}
}
문제. 콘솔에 출력되는 값과 그 값이 나온 이유를 객체지향의 관점에서 설명하시오.
옘병한다
ㄴ 왜여?
지랄 그만 싸고 자라
이거 왜 6이나옴?
ㄴ java 컬렉션 프레임워크의 핵심 클래스인 HashSet과 상속에 대한 개념을 이해하고 있는지 묻는 문제로서, HashSet에서 제공하는 addAll 메소드를 내부적으로 들여다보면 사실 add 메소드를 통해 구현이 되어있기 때문에 CustomHashSet에 정의된 addAll 메소드는 addCount에 3을 더한 다음에 상속 받은 super 클래스인 HashSet의 addAll 메소드를 super.addAll()과 같이 호출하고 있기 때문에 결국 add() 메소드를 6번 호출하는 것과 같은 결과가 나오기 때문에 addCount은 6이 된다.
AbstractCollection 에서 add를 실행하는데 CustomHashSet add가 3번 호출돼서 3+1+1+1 = 6 아닌가여?
AbstractCollection 에서 실행한 add가 왜 CustomHashSet 에서 실행되는지 궁금햇는데 이게 아닌가