2010-12-08 3 views
34

컬렉션 프레임 워크에서 우리는 인터페이스 List과 클래스 AbstractList을 가지고 있습니다 :왜 ArrayList에 "implements List"가 있습니까?

ArrayList ArrayList AbstractList ArrayList
implements List 

질문 : 왜 ArrayListimplements List 절이 있습니까?

ArrayList extends AbstractListAbstractList implements List이라면 ArrayList implement List라고 말할 수 없습니까?

답변

39

예. 그것은 생략되었을 수 있습니다. 그러나 즉시 그것이 List임을 알 수 있습니다. 그렇지 않으면 코드/문서를 통해 추가 클릭이 필요합니다. 나는 그 이유가 명확하다고 생각합니다.

그리고 Joeri Hendrickx가 논평 한 내용을 추가하십시오. 이는 ArrayListList을 구현한다는 것을 보여주기위한 것입니다. 전체 그림에서 AbstractList은 단지 편의를 위해 List 구현 간의 코드 중복을 줄입니다.

+21

뿐만 아니라 의도적 인 표현이기 때문에이 스타일을 선호합니다. arraylist의 목표는 List를 구현하는 것입니다. 추상 목록을 확장하는 것은 그 목표를 달성하는 한 방법 일뿐입니다. –

+0

@Joeri Hendrickx가 동의했습니다. +1 – Bozho

+0

기본 클래스가 인터페이스를 구현하는 경우 현재 JavaDoc 도구 (Oracle 및 Gnu 버전 모두)는 파생 클래스에 'Interface 구현 '하지 않고 파생 클래스가 인터페이스를 자동으로 구현 함을 나타냅니다. 따라서 추가 클릭이 필요하지 않습니다. (기본 클래스가 public이 아니더라도 true입니다.) –

6

대부분 상속 구조의 추적 가능성을 높이기위한 것입니다. 그렇게하면 Javadoc 등을 탐색 할 때 전체 상속 트리를 내려갈 필요가 없습니다.

5

내 2 센트는 ArrayList 목록임을 유지하는 것입니다. AbstractList는, List가 요구하는 특정의 구현을 완료합니다.

관련 문제