接口(Interface)的深刻理解spa
一:接口是規範(不展開)對象
二:接口能夠當作是一個特殊的類blog
1: 接口能夠定義「接口類型變量」,就好像類能夠定義類類型的變量(或者說是引用類型變量)。申明一個類類型的變量,而後咱們一般使用構造器建立對象,並把該對象賦值給類類型的變量(或者說引用變量引用到咱們建立的對象)。這樣,咱們就能夠經過類類型的變量來操做咱們實際new出來的對象。於此相似的,咱們也能夠建立接口類型的變量(或者說是接口類型的引用變量),並把一個實現了該接口的實現類的對象賦值給接口類型的引用變量(或者說接口類型的引用變量引用到該接口實現類的對象)。經過接口類型的變量,咱們即可以調用實現了該接口的類的對象。從這看出,類和接口有類似的地方。它們都有多態的存在排序
代碼以下接口
2:接口類型的引用變量,咱們能夠傳一個實現該接口抽象方法的匿名內部類(匿名內部類會建立一個實現一個該接口抽象方法的對象)。本質上來講,仍是經過接口類型的變量,來調用實現該接口建立出來的對象實例泛型
代碼以下變量
三: 接口能夠理解爲是一個功能模塊引用
咱們本身寫的類經過實現Java提供的相應的接口,並重寫接口的抽象方法,就能夠獲得咱們想要的功能方法
舉個例子im
TreeSet是SortSet的子類,這意味着存入TreeSet的元素(對象),必需要有一個比較大小的方法,否者TreeSet沒法保證元素是有序存放的
假設咱們存放的是Person類的對象。Person類有name(String),age(int),兩個成員變量。咱們必須確保TreeSet有一個比較Person類的實例對象的方法
咱們用先比較名字的字母順序,在來比較年齡的大小的方法來排序
在這裏咱們能夠有兩種選擇
實現Comparable接口,或者實現Comparator接口
先來使用Comparable接口
Person類實現Comparable接口,並重寫compareTo()方法(緣由:TreeSet在添加對象時,會調用對象的compareTo()來比較對象的大小)
代碼以下
注:上述代碼沒有實現泛型
再來使用Comparator接口來實現
代碼以下
結果相同
至於爲何要把Comparator的comparator做爲參數傳入TreeSet()構造器中,本人也是小白。我目前也不清楚
有人知道的話,能夠說一下
分割線
----------------------------------
TreeSet(Comparator comparator)
構造一個空的樹集合,它按照由comp指定的比較方法進行排序