2014-09-15 11 views
0

모두! 차이점은 무엇입니까

그냥 자바 공부를 시작하고, 예를 들어, 한 순간을 이해할 수 없다 :

Set<Integer> intset = new HashSet<Integer>(); (1) 

HashSet<Integer> intset2 = new HashSet<Integer>(); (2) 

이 예제의 차이점은 무엇입니까? 또는 그들은 동일합니까? (1) 예제는 상향 캐스팅처럼 보이므로 Set (interface) 메서드 만있는 HashSet이 있다는 의미입니까? 당신의 답변에 감사드립니다! 당신이

Set intset = new HashSet(); 

을 쓸 때

+0

중복에 대해 잘 모르겠습니다 ... "차이점은 무엇입니까?"라는 질문과 "인터페이스 사용을 선호하는 이유"라는 질문이 있습니다. 그것들은 두 가지 뚜렷한 질문이며 동일한 주제에 관한 이야기 ​​외에도 서로 겹치지도 않습니다. – Desorder

답변

4

는 다음과 같은 코드가 캐스팅하지 않는 경우는 HashSet 클래스의 특이성 중 하나를 사용하지 않을 것을 보증을 제공합니다. 즉, 향후 구현은 HashSetSet의 다른 구현으로 대체하거나 다른 곳에서 수신 할 수 있음을 의미합니다. 실제로는 코드가 덜 coupled임을 의미하므로 모범 사례입니다.

2

Set은 인터페이스이고 HashSetSet 인터페이스의 해시 구현입니다.

insetSet이므로 HashSet과 같은 Set의 구현을 참조 할 수 있습니다. 반면에 inset2HashSet 개체 만 참조 할 수 있습니다.

0

세트 [설정] [1]은 인터페이스가 HashSet의이 [HashSet의] [2] 클래스이다 HashSet의 클래스에서 구현 집합 인터페이스 방법 HashSet의 클래스 세트 인터페이스를

1

구현이 다형이다.

이 두 예제의 차이점은 무엇입니까?

예제 1은 Set 유형의 메모리 공간에 "포인터"를 만듭니다. 즉, Set 인터페이스에 선언 된 모든 메서드를 사용하여 메모리 공간을 조작 할 수 있습니다.

예제 2는 HashSet 유형의 메모리 공간에 "포인터"를 만듭니다. 즉, HashSet 클래스에 선언 된 모든 메서드를 사용하여 메모리 공간을 조작 할 수 있습니다.

또는 동일합니까?

두 줄 이후에 수행 할 작업에 따라 다릅니다. Set는 Set과 유사한 콜렉션에 대한 일반적인 계약이지만 때로는 더 구체적인 메소드가 필요합니다. 그 때 당신은 더 구체적인 유형으로 Object를 다운 캐스팅해야합니다. 인터페이스는 공통성을 처리해야합니다.

(1) 예제는 상영과 비슷해 Set (인터페이스) 메소드 만있는 HashSet을 가지고 있다는 뜻입니까?

예.

관련 문제