2011-01-12 6 views
0

간단한 구문 질문입니다. 우리는 우리가 IMyClass를 호출하는 인터페이스, 우리는 AbstractMyClass를 호출 할 구현하고 다음과 같이 선언 추상 클래스가 있다고 가정 : 이제구문 질문 - 인터페이스를 구현하는 추상 클래스를 확장합니다.

public abstract class AbstractMyClass implements IMyClass { 
} 

우리는 우리가 호출 MyClass에의 구체적인 구현을 만들 때를 .. .!

public class MyClass extends AbstractMyClass { 
} 

여기 최선의

public class MyClass extends AbstractMyClass implements IMyClass { 
} 

: MyClass, 우리는 그것을 선언 할 수있는 두 가지 방법이있다? 나는 이것에 대한 대답이 단지 선호의 문제라고 가정하고 있지만 이것에 대한 약간의 생각을 듣고 싶었다.

미리 감사드립니다.

Joseph.

답변

1

그것은 단지 선호 사항입니다. '예'가 HashMap`, 그는 아무튼 같은 경우에 그

조쉬 블로흐 말한 것을
public class HashMap<K,V> 
    extends AbstractMap<K,V> 
    implements Map<K,V>, Cloneable, Serializable 

public class ThreadPoolExecutor extends AbstractExecutorService 
+0

주 (내가 미안를보고 위치를 기억하지 않음) : FWIW, 당신은 JDK 소스 모두에 대한 예제를 찾을 수 있습니다 ''지도 구현 '이 많이 추가되었다고 생각하고 다시 할 때 그는 그만 두었다. – ColinD

+0

그는 다시해야할까요? 다음 JDK 릴리스가'implements' 절을 삭제하면 어떻게됩니까? '여전히 implements'가 함축되어 있기 때문에 바이너리와 소스와 호환 될 것입니다. 맞습니까? – Thilo

+0

명시 적으로'implements'가'instanceof' 호출을 (그렇게 약간만) 더 빠르게합니까? – Thilo

2

후자의 형식은 MyClass가 의도적으로 IMyClass를 구현하고 실수로 구현하지 않는다는 사실에 대해 더 명확합니다. 그것이 당신이 강조하고자하는 것이라면,이 형태는 더 분명합니다. 또한 AbstractMyClass의 향후 변경 사항을 방지합니다. 아마 어느 시점에서 IMyClass 구현을 중단합니다.

대부분의 경우 첫 번째 양식으로 충분하며 특별한 번거 로움이 없습니다.

관련 문제