2017-06-23 52 views
0

我是Java的新手,我編碼只是爲了好玩,我對此很感興趣。聲明中的區別Java

Set<Employee> employees1 = new HashSet<Employee>(); 
HashSet<Employee> employees2 = new HashSet<Employee>(); 

這兩個聲明有什麼區別嗎?我的意思是像「幕後」?我在這裏尋找類似的問題,但我沒有找到任何可能的,因爲我不知道如何解釋搜索領域的問題。

+3

'Set'是一個接口。 'HashSet'是該接口的一個實現。如果你說'Set',你可以將HashSet替換爲你想要的任何其他實現(Set)(在運行時)。 – byxor

+0

查找互連/多態。它應該爲你清理一些事情。 – DCON

+0

使用第一個聲明的主要優點是抽象,這將使您有機會在未來將Set實現(例如SortedSet)切換。 – mulya

回答

2

Set是一個接口,其中HashSet是一個實現該接口的類。

Set<Employee> employees1 = new HashSet<Employee>(); 

通過引用變量employees1可以調用只有那些方法,其在Set接口中聲明,並在HashSet覆蓋HashSet

HashSet<Employee> employees2 = new HashSet<Employee>(); 

使用employees2,你將能夠調用Set接口和HashSet類的自己的方法的重載方法(未在設置界面中聲明。)

+2

而使用第一個聲明的主要優點是抽象,這將使您有機會在未來將Set實現(例如SortedSet)切換。 (將此評論複製到問題本身) – mulya

+0

@ mulya不錯的觀點 – gprathour

+2

選擇使用界面就像發送未來自己的驚喜禮物一樣。 – byxor

0

Set是一個接口,而HashSet是一個其實施。

如果你的變量被聲明爲Set,它可能有其他的實現值。 EG:

employees1 = new TreeSet<Employee>();