接口(Interface)的深入理解


接口(Interface)的深入理解

一:接口是規范(不展開)

二:接口可以看成是一個特殊的類

1: 接口可以定義“接口類型變量”,就好像類可以定義類類型的變量(或者說是引用類型變量)。申明一個類類型的變量,然后我們通常使用構造器創建對象,並把該對象賦值給類類型的變量(或者說引用變量引用到我們創建的對象)。這樣,我們就可以通過類類型的變量來操作我們實際new出來的對象。於此類似的,我們也可以創建接口類型的變量(或者說是接口類型的引用變量),並把一個實現了該接口的實現類的對象賦值給接口類型的引用變量(或者說接口類型的引用變量引用到該接口實現類的對象)。通過接口類型的變量,我們便可以調用實現了該接口的類的對象。從這看出,類和接口有相似的地方。它們都有多態的存在

代碼如下

 

 

2:接口類型的引用變量,我們可以傳一個實現該接口抽象方法的匿名內部類(匿名內部類會創建一個實現一個該接口抽象方法的對象)。本質上來說,還是通過接口類型的變量,來調用實現該接口創建出來的對象實例

代碼如下

 

 

三: 接口可以理解為是一個功能模塊

我們自己寫的類通過實現Java提供的相應的接口,並重寫接口的抽象方法,就可以得到我們想要的功能

舉個例子

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM