接口(Interface)的深刻理解

接口(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指定的比較方法進行排序

相關文章
相關標籤/搜索