天天看點

java一個使用者同時間通路同個接口_Java面向對象之接口——interface什麼是接口Java中的接口面向接口程式設計

java一個使用者同時間通路同個接口_Java面向對象之接口——interface什麼是接口Java中的接口面向接口程式設計

Java面向對象之接口——interface

什麼是接口

一般計算機中的接口分為硬體接口和軟體接口。

硬體接口:是指兩個硬體裝置之間的連接配接方式,既包括實體上的接口,還包括邏輯上的資料傳送協定。

軟體接口:通常是指程式代碼,在Java中表示一種特殊的類,是具有的N個方法的特征集合,表示一種規範;還有一種情況資料接口,表示用戶端和服務端之間的資料互動的方式。

比如,顯示器中封裝了很多電子元器件,這些元器件連接配接在一起為顯示器的正常共工作提供支援,那顯示器如何與外界的其他裝置(如電腦主機、外放音響、耳機等裝置)通信互動呢?也是通過顯示暴露的通信接口——顯示器上暴露的“孔”。通過連接配接這些“孔”,其他裝置就能和顯示一起工作,能夠擷取顯示器中的資訊資料,也能夠為顯示器提供一些顯示器不具備的功能,比如:優質的音響效果。

接口的設計目的:從上述的顯示器例子中,不難發現,接口可以看作是裝置和裝置之間的通信橋梁,通過交換資料完成通信。接口表示一種規範/限制/實作者必須遵循的規範,目的就是用來限制使用者應該怎麼做。那如果沒有這些規範(接口),會出現什麼樣的問題?

在如今這個智能機泛濫的年代,不知道大家有沒有懷念當年功能機和山寨機橫行的年代,在那些年代,收件之間的充電裝置各個品牌有各個品牌的“特色”,各個品牌均不一樣;如果充電裝置丢了,或者損壞了,往往要花費很大的代價才能才能買到新的,是以在當時的萬能充電器才能流行一時,但其充電效果卻并不如人意。

由此帶來的問題極大的困擾了廣大手機使用者。

java一個使用者同時間通路同個接口_Java面向對象之接口——interface什麼是接口Java中的接口面向接口程式設計

各有特色的功能機充電器

直到Android系統的出現,統一了充電接口規範後,這個問題才得到了有效解決。大多數Android手機的充電的接口是相同的( Micro-USB/Type-c/Lightning)。當然了,蘋果手機是個特立獨行的大佬。

生活中,USB接口和我們經常接說的USB插槽其實是有所偏差的,其并不是我們平時所看到的那些USB插槽,而是那些USB插槽所遵循的一種規範(标準)。USB的英文是Universal Serial Bus(通用串行總線),用于規範電腦與外部裝置的連接配接和通訊,廣泛應用于PC領域的接口技術。

我們所看到的那些USB插槽是根據USB接口規範設計出來的産品,對于不同型号的USB裝置而言,他們各自的USB插槽都需要遵循同一個規範,如此可以保證任何插入USB插槽的裝置都能與主機闆正常通信。對于同一種型号的主機闆上的多個USB插槽,他們有相同的資料交換方式,相同的實作細節;在面向對象的思想中,可認為他們都是同一個類的不同執行個體,也就是說插槽是USB規範的執行個體。

java一個使用者同時間通路同個接口_Java面向對象之接口——interface什麼是接口Java中的接口面向接口程式設計

接口和實作類展現了真正的多态

接口隻定義了應當遵循的規範,卻并不關心這些規範的内部資料和其功能的實作細節,進而分離了規範和實作,增強了系統的可拓展性和可維護性。這樣做的好處:比如,主機闆上提供了USB插槽,隻要一個遵循了USB規範的滑鼠,就可以插入USB插槽,并與主機闆正常通信,而不必關心至于這個滑鼠的廠商,滑鼠内部實作。當滑鼠壞了的時候,隻需要換個滑鼠就行。

Java中的接口

Java中的接口,書面解釋是多個抽象類的抽象就是接口;通俗點說,在Java中最小的程式單元是類,而接口其實是一個特殊的類。和USB接口一樣,Java中的接口也表示規範,用于定義一組抽象方法,表示某一類事物必須具備的功能,接口的實作類來實作該接口并提供接口中每個方法的實作。

定義類文法: 權限修飾符 class 類名{}定義接口文法: 權限修飾符 interface 接口名{}
           

接口的命名:

  1. 表示具有某些能力的,可以以able/handler結尾。如: Walkable.java
  2. 以I開頭表示接口,如: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 {}
           

标志接口:沒有任何成員,僅僅提供一個接口定義的接口,其就隻是一個标志,若有類實作該接口,則該類就屬于接口這一派系。這個使用的不多,了解就好。

常量接口:使用接口來封裝多個常量資訊,稱之為常量接口,其目的和普通常量類相同,但在這裡不建議使用。

接口的特點:

  1. 接口沒有構造器,更不能顯式定義構造器,故接口不能被執行個體化。
  2. 接口裡的方法方法全是抽象公共的,預設修飾符是public abstract。
  3. 接口裡的字段全是全局靜态常量,預設修飾符是public static final。
  4. 接口裡的内部類全是公共靜态的,預設修飾符是public static。

接口的繼承:

接口隻能繼承接口,不能繼承類,且接口支援多繼承(類是單繼承關系)。接口繼承文法如下:

[修飾符] interface 接口名 extends 接口1,接口2
           

類和類之間的繼承關系用extends關鍵字來表示,接口和接口之間也隻能是繼承關系,也使用extends 關鍵字來表示。

接口和實作類之間隻能是實作關系,而且是類實作接口,用implements關鍵字來表示。

java一個使用者同時間通路同個接口_Java面向對象之接口——interface什麼是接口Java中的接口面向接口程式設計

類和接口的實作關系

接口的實作

接口僅僅隻是定義了某一類事物應該具有某些功能,但是沒有提供任何實作。但在Java 8以及以後的版本中,接口是可以有預設實作的。此時,我們定義了一個類,再用該類去實作接口,那麼就必須覆寫接口中的方法,提供功能實作,進而實作類接口中定義的功能。

類實作接口:一個類可以實作多個接口,進而也彌補了類的單繼承問題。文法如下:

[修飾符] class 實作類名 extends 父類 implements 接口1,接口2{}
           

接口和實作類之間的關系,稱之為"實作關系",使用implements關鍵字來表示,但有時候為了友善,也把這個實作關系稱之為特殊繼承關系。可以這樣了解:接口是實作類的父類:實作類就是接口的子類。

面向接口程式設計

接口和實作類的多态關系是在開發中比較常見的多态展現

接口 變量 = 建立實作類對象;//展現了多态思想
           

接口中的方法是公共的抽象的,是以實作類必須覆寫接口中的方法,并且方法必須使用public修飾,因為接口中的方法預設就是使用public修飾的。

接口和抽象類的相同點:

  1. 都位于繼承的頂端,用于被其他類或者接口實作或繼承;
  2. 都不能被執行個體化;
  3. 都可以定義抽象方法,其子類/實作類都必須覆寫這些抽象方法;

接口和抽象類的不同點:

  1. 接口沒有構造方法,抽象類有構造方法;
  2. 抽象類可包含普通方法和抽象方法,接口隻能包含抽象方法(Java8之前);
  3. 類是單繼承的,一個類隻能繼承一個直接父類(可能是抽象類),接口是支援多繼承的;一個可以類實作多個接口(接口彌補了Java的單繼承);
  4. 成員變量:接口裡預設是public static final,抽象類是預設包權限;
  5. 方法:接口裡預設是public abstract,抽象類預設是預設包通路權限;
  6. 内部類:接口裡預設是public static,抽象類預設是預設包通路權限;

如果接口和抽象類可以完成相同的功能,盡量使用接口,這就是面向接口程式設計。面向接口程式設計在于使用多态的好處,把實作類對象賦給接口類型變量,屏蔽了不同實作類之間的實作差異,進而可以做到通用程式設計。

案例:使用USB裝置來工作。

java一個使用者同時間通路同個接口_Java面向對象之接口——interface什麼是接口Java中的接口面向接口程式設計

USB接口及USB實作裝置

java一個使用者同時間通路同個接口_Java面向對象之接口——interface什麼是接口Java中的接口面向接口程式設計

主機闆

java一個使用者同時間通路同個接口_Java面向對象之接口——interface什麼是接口Java中的接口面向接口程式設計

運作執行個體

完結。