2010-09-15 82 views
4

在Java中,'Set'和'List'是從'Collection'接口派生的接口。 如果我們使用的代碼:定義'Set set = new HashSet()'時,是否設置了接口或類的實例Set?

import java.util.*; 

public class SetExample{ 

    public stactic void main(String[] args){ 
     Set set = new HashSet(); 
     //do something ..... 
    } 

} 

是否有我們正在創建的對象(「設置」)「收集」 API「設置」一類?或者我們正在實例化一個接口'Set'?

我真的很迷茫.......:O型

回答

11

java.util.Set是一個接口,而不是一個類。所以

Set set = new HashSet(); 

創建一個對象,它是一個HashSet實例,對該對象的引用指派到其類型是Set一個變量。這是有效的,因爲HashSet實現了Set接口。另一方面:

Set set = new Set(); 

給出了編譯錯誤,因爲您無法創建接口的實例。

Java接口本質上是實現(類)和使用它的事物之間的契約。它說明符合對象的方法的名稱和簽名是什麼,但沒有說明對象的狀態或其方法如何工作。

(僅僅是用來迷惑的東西有點... Java也可以讓你寫的東西是這樣的:

Set set = new Set() { 
    // attributes and methods go here 
}; 

這是不創建的Set界面的「實例」 本身 .. 。因爲那是沒有意義的,相反,它聲明和實例化匿名類工具Set接口。)

+0

我來這裏找出'Set set = new HashSet ();'vs'HashSet set = new HashSet ();'。那麼是否有區別? – Madmenyo 2015-07-03 15:43:39

0

參考setjava.util.Set這是一個interface。雖然它實際上指向類型爲java.util.HashSet的對象。 (多態)

0

在API中,你會得到一堆隱藏實現的接口。例如設置允許你 隱藏任何實現,其中HashSet是其中之一。

1

java.util.Set接口提供鬆散耦合與java.util.HashSet對象。因此開發人員可以使用另一個java.util.Set接口系列對象的java.util.Set參考。

相關問題