2012-12-27 5 views
1

가능한 중복 :
Java.util.HashMap — why HashMap extends AbstractMap and implement Map?
Why would both a parent and child class implement the same interface?Java : WeakHashMap이 Map을 구현하는 이유는 무엇입니까? 반면 AbstractMap은 이미 구현 되었습니까?

의 WeakHashMap < K는, V> 모두 AbstractMap < K 확장에 선언, V>지도 < K를 구현 , V>.

그러나 AbstractMap < K, V> 이미 지도 < K, V>을 구현합니다. implements 선언이 중복되는 것 같습니다.

신고 이유는 무엇입니까?

+4

문서화를위한 중복. –

+1

여기를 참조하십시오 : http://stackoverflow.com/questions/5668429/why-would-both-a-parent-and-child-class-implement-the-same-interface – AFS

+0

문서 또는 구현 그 자체? – fge

답변

3

누군가가 JDK에서 WeakHashMap의 작성자가 온라인으로 게시 한 이유를 지적하지 못하게 할 수 있습니다. 추측은 자동 생성 된 문서를 개선한다는 것입니다. 클래스에 의해 노출 된 인터페이스 나 사용 방법에 영향을주지 않습니다.

+0

클래스에 대해 생성 된 javadoc은 사용 된 도크 렛 클래스에 따라 달라지며 기본 도크 렛이 "깊이"인터페이스를 쿼리하므로 중복 인터페이스를 생략하는지 여부는 중요하지 않습니다. javadoc . – fge

+0

@ fge : 나는 의견이 맞지 않습니다. :-) 나는 Sun 엔지니어들이 (있는 그대로) 이유를 가지고 이것을했다고 믿고 싶다. 나도 그러고 싶지만 ... –

2

실제로는 중복되지만 인터페이스 구현이 부모로부터 제거되면 자식은 여전히 ​​Map 인터페이스로 보유하고 필요한 컴파일 오류를 생성합니다.

+0

리베이스하고 새로운베이스가'Map ', ** 및 **을 구현하지 않았다면 당신은'implements'와 필요한 배관 공사를 추가하지 않았을 것입니다. 그것은 꽤 충격적인 편집 일 것입니다. :-) –

1

이것은 "간과 한 것처럼 보입니다". 클래스를 확장하면 기본 클래스 (기본 클래스가 abstract이든 아니든간에)에 의해 구현 된 모든 인터페이스가 자동으로 구현됩니다. 그래서, 주어진 :

public interface I {} 

public class A implements I {} 

당신은 선언 :

public class B extends A {} 

위의 선언은

실제로 간과
public class B extends A implements I {} 

에 엄격하게 동일합니다. Good spotting;)