Java面向對象之接口——interface
java
通常計算機中的接口分爲硬件接口和軟件接口。編程
Java
中表示一種特殊的類,是具備的N個方法的特徵集合,表示一種規範;還有一種狀況數據接口,表示客戶端和服務端之間的數據交互的方式。好比,顯示器中封裝了不少電子元器件,這些元器件鏈接在一塊兒爲顯示器的正常共工做提供支持,那麼顯示器如何與外界的其餘設備(如電腦主機、外放音響、耳機等設備)通訊交互呢?也是經過顯示暴露的通訊接口——顯示器上暴露的「孔」。經過鏈接這些「孔」,其餘設備就能和顯示器一塊兒工做,可以獲取顯示器中的信息數據,也可以爲顯示器提供一些顯示器不具有的功能,好比:優質的音響效果。spa
接口的設計目的:從上述的顯示器例子中,不難發現,接口能夠看做是設備和設備之間的通訊橋樑,經過交換數據完成通訊。接口表示一種規範/約束/實現者必須遵循的規範,目的就是用來約束使用者應該怎麼作。那若是沒有這些規範(接口),會出現什麼樣的問題?設計
手機的充電器就是接口的實際應用的一個極好的例子。在現在這個智能機氾濫的年代,不知道你們有沒有懷念當年功能機和山寨機橫行的年代;在那些年代,手機之間的充電設備,各個品牌有各個品牌的「特點」,各個品牌均不同。3d
若是充電設備丟了,或者損壞了,每每要花費很大的代價才能才能買到新的,因此在當時的萬能充電器才能流行一時,但其充電效果卻並不如人意。由此帶來的問題極大的困擾了廣大手機用戶。code
直到Android系統的出現,統一了充電接口規範後,這個問題才獲得了有效解決。由於安卓系通通一了手機充電接口規範,因此幾乎全部的Android手機的充電接口是相同的( Micro-USB/Type-c/Lightning
)。固然了,蘋果手機是個特立獨行的大佬,不在討論的範圍以內。對象
USB接口blog
生活中,USB接口和咱們常常接說的USB插槽實際上是有所誤差的,其並非咱們平時所看到的那些USB
插槽,而是那些USB插槽所遵循的一種規範(標準)。USB
的英文是Universal Serial Bus
(通用串行總線),用於規範電腦與外部設備的鏈接和通信,普遍應用於PC
領域的接口技術。繼承
咱們所看到的那些USB
插槽是根據USB
接口規範設計出來的產品,對於不一樣型號的USB
設備而言,他們各自的USB
插槽都須要遵循同一個規範,如此能夠保證任何插入USB
插槽的設備都能與主板正常通訊。接口
對於同一種型號的主板上的多個USB
插槽,他們有相同的數據交換方式,相同的實現細節;在面向對象的思想中,可認爲他們都是同一個類的不一樣實例,也就是說USB
插槽是USB
規範的實例。
接口只定義了應當遵循的規範,卻並不關心這些規範的內部數據和其功能的實現細節,從而分離了規範和實現,加強了系統的可拓展性和可維護性。這樣作的好處:好比,主板上提供了USB
插槽,只要一個遵循了USB
規範的鼠標,就能夠插入USB
插槽,並與主板正常通訊,而沒必要關心至於這個鼠標的廠商,鼠標內部實現。當鼠標壞了的時候,只須要換個鼠標就行。
Java中的接口,書面解釋是多個抽象類的抽象就是接口;通俗點說,在Java
中最小的程序單元是類,而接口實際上是一個特殊的類。和USB
接口同樣,Java
中的接口也表示規範,用於定義一組抽象方法,表示某一類事物必須具有的功能,接口的實現類來實現該接口並提供接口中每一個方法的實現。
定義類語法: 權限修飾符 class 類名{}
定義接口語法: 權限修飾符 interface 接口名{}
接口的命名:
able/handler
結尾。如: Walkable.java
IWalkable.java
接口在編譯成功以後,和類同樣,也是.class
的字節碼文件。
接口中的成員:
1.接口中沒有構造器,由於接口不能使用new
關鍵字建立對象(不能 new
);
2.接口中不能定義普通方法,接口中的方法都是默認爲公共的抽象方法,並且都是 public abstract
修飾的;因此接口中的方法的public
符 和 abstract
修飾符是能夠省略不寫的;
3.接口中定義的成員變量,實質是全局靜態常量,默認使用 public static final來修飾;
public static final String NAME = "老夫不正經";
4.接口中定義的內部類都是公共的靜態內部類,默認使用public static來修飾內部類.
public static interface Openable {}
標誌接口:沒有任何成員,僅僅提供一個接口定義的接口,其就只是一個標誌,如有類實現該接口,則該類就屬於接口這一派系。這個使用的很少,瞭解就好。
常量接口:使用接口來封裝多個常量信息,稱之爲常量接口,其目的和普一般量類相同,但在這裏不建議使用。
接口的特色:
public abstract
。public static final
。public static
。接口的繼承:
接口只能繼承接口,不能繼承類,且接口支持多繼承(類是單繼承關係)。接口繼承語法以下:
[修飾符] interface 接口名 extends 接口1,接口2
類和類之間的繼承關係用extends
關鍵字來表示,接口和接口之間也只能是繼承關係,也使用extends
關鍵字來表示。
接口和實現類之間只能是實現關係,並且是類實現接口,用implements關鍵字來表示。
接口的實現
接口僅僅只是定義了某一類事物應該具備某些功能,可是沒有提供任何實現。但在Java 8
以及之後的版本中,接口是能夠有默認實現的。此時,咱們定義了一個類,再用該類去實現接口,那麼就必須覆蓋接口中的方法,提供功能實現,從而實現類接口中定義的功能。
類實現接口:一個類能夠實現多個接口,從而也彌補了類的單繼承問題。語法以下:
[修飾符] class 實現類名 extends 父類 implements 接口1,接口2{}
接口和實現類之間的關係,稱之爲"實現關係",使用implements
關鍵字來表示,但有時候爲了方便,也把這個實現關係稱之爲特殊繼承關係。能夠這樣理解:接口是實現類的父類:實現類就是接口的子類。
接口和實現類的多態關係是在開發中比較常見的多態體現
接口 變量 = 建立實現類對象;//體現了多態思想
接口中的方法是公共的抽象的,因此實現類必須覆蓋接口中的方法,而且方法必須使用public
修飾,由於接口中的方法默認就是使用public
修飾的。
接口和抽象類的相同點:
接口和抽象類的不一樣點:
Java 8
以前);Java
的單繼承);public static final
,抽象類是默認包權限;public abstract
,抽象類默認是默認包訪問權限;public static
,抽象類默認是默認包訪問權限;若是接口和抽象類能夠完成相同的功能,儘可能使用接口,這就是面向接口編程。面向接口編程在於使用多態的好處,把實現類對象賦給接口類型變量,屏蔽了不一樣實現類之間的實現差別,從而能夠作到通用編程。
案例:使用USB設備來工做。
完結。老夫雖不正經,但老夫一身的才華