當前位置 : IT培訓網 > Java開發 > Java教程 > Java接口(interface)的概念及如何使用

Java接口(interface)的概念及如何使用

時間:2016-08-05 15:42:17??來源:Java培訓網??作者:IT培訓網??已有:名學員訪問該課程
在Java抽象類中,可以包含一個或多個抽象方法;但在接口(interface)中,所有的方法必須都是抽象的,不能有方法體,它比抽象類更加“抽象”。

接口,編程語言也有接口嗎,是有的,今天達內IT培訓網小編就來給大家詳細介紹下吧,什么是Java接口,如何使用Java接口。

JAVA的核心概念:接口(interface)

接口與類屬于同一層次,實際上,接口是一種特殊的抽象類。

如:    interface IA{ }  public interface:

公開接口  與類相似,一個文件只能有一個public接口,且與文件名相同。 在一個文件中不可同時定義一個public接口和一個public類。 

一個接口中,所有方法為公開、抽象方法;所有的屬性都是公開、靜態、常量。 

一個類實現一個接口的格式: class IAImple implements IA{ };   一個類實現接口,相當于它繼承一個抽象類。

類必須實現接口中的方法,否則其為一抽象類。 實現中接口和類相同。  

在Java抽象類中,可以包含一個或多個抽象方法;但在接口(interface)中,所有的方法必須都是抽象的,不能有方法體,它比抽象類更加“抽象”。

接口使用 interface 關鍵字來聲明,可以看做是一種特殊的抽象類,可以指定一個類必須做什么,而不是規定它如何去做。

現實中也有很多接口的實例,比如說串口電腦硬盤,Serial ATA委員會指定了Serial ATA 2.0規范,這種規范就是接口。Serial ATA委員會不負責生產硬盤,只是指定通用的規范。

希捷、日立、三星等生產廠家會按照規范生產符合接口的硬盤,這些硬盤就可以實現通用化,如果正在用一塊160G日立的串口硬盤,現在要升級了,可以購買一塊320G的希捷串口硬盤,安裝上去就可以繼續使用了。

下面的代碼可以模擬Serial ATA委員會定義以下串口硬盤接口:

//串行硬盤接口

public interface SataHdd{

    //連接線的數量

    public static final int CONNECT_LINE=4;

    //寫數據

    public void writeData(String data);

    //讀數據

    public String readData();

}

注意:接口中聲明的成員變量默認都是 public static final 的,必須顯示的初始化。因而在常量聲明時可以省略這些修飾符。

接口是若干常量和抽象方法的集合,目前看來和抽象類差不多。確實如此,接口本就是從抽象類中演化而來的,因而除特別規定,接口享有和類同樣的“待遇”。比如,源程序中可以定義多個類或接口,但最多只能有一個public 的類或接口,如果有則源文件必須取和public的類和接口相同的名字。和類的繼承格式一樣,接口之間也可以繼承,子接口可以繼承父接口中的常量和抽象方法并添加新的抽象方法等。

但接口有其自身的一些特性,歸納如下。

1) 接口中只能定義抽象方法,這些方法默認為 public abstract 的,因而在聲明方法時可以省略這些修飾符。試圖在接口中定義實例變量、非抽象的實例方法及靜態方法,都是非法的。例如:

public interface SataHdd{

    //連接線的數量

    public int connectLine; //編譯出錯,connectLine被看做靜態常量,必須顯式初始化

    //寫數據

    protected void writeData(String data); //編譯出錯,必須是public類型

    //讀數據

    public static String readData(){ //編譯出錯,接口中不能包含靜態方法

        return "數據"; //編譯出錯,接口中只能包含抽象方法,

    }

}

3) 接口中沒有構造方法,不能被實例化。

4) 一個接口不實現另一個接口,但可以繼承多個其他接口。接口的多繼承特點彌補了類的單繼承。例如:

//串行硬盤接口

public interface SataHdd extends A,B{

    // 連接線的數量

    public static final int CONNECT_LINE = 4;

    // 寫數據

    public void writeData(String data);

    // 讀數據

    public String readData();

}

interface A{

    public void a();

}

interface B{

    public void b();

}

為什么使用接口

大型項目開發中,可能需要從繼承鏈的中間插入一個類,讓它的子類具備某些功能而不影響它們的父類。例如 A -> B -> C -> D -> E,A 是祖先類,如果需要為C、D、E類添加某些通用的功能,最簡單的方法是讓C類再繼承另外一個類。但是問題來了,Java 是一種單繼承的語言,不能再讓C繼承另外一個父類了,只到移動到繼承鏈的最頂端,讓A再繼承一個父類。這樣一來,對C、D、E類的修改,影響到了整個繼承鏈,不具備可插入性的設計。

接口是可插入性的保證。在一個繼承鏈中的任何一個類都可以實現一個接口,這個接口會影響到此類的所有子類,但不會影響到此類的任何父類。此類將不得不實現這個接口所規定的方法,而子類可以從此類自動繼承這些方法,這時候,這些子類具有了可插入性。

我們關心的不是哪一個具體的類,而是這個類是否實現了我們需要的接口。

接口提供了關聯以及方法調用上的可插入性,軟件系統的規模越大,生命周期越長,接口使得軟件系統的靈活性和可擴展性,可插入性方面得到保證。

接口在面向對象的 Java 程序設計中占有舉足輕重的地位。事實上在設計階段最重要的任務之一就是設計出各部分的接口,然后通過接口的組合,形成程序的基本框架結構。

接口的使用

接口的使用與類的使用有些不同。在需要使用類的地方,會直接使用new關鍵字來構建一個類的實例,但接口不可以這樣使用,因為接口不能直接使用 new 關鍵字來構建實例。

接口必須通過類來實現(implements)它的抽象方法,然后再實例化類。類實現接口的關鍵字為implements。

如果一個類不能實現該接口的所有抽象方法,那么這個類必須被定義為抽象方法。

不允許創建接口的實例,但允許定義接口類型的引用變量,該變量指向了實現接口的類的實例。

一個類只能繼承一個父類,但卻可以實現多個接口。

實現接口的格式如下:

修飾符 class 類名 extends 父類 implements 多個接口 {

    實現方法

}

請看下面的例子:

import static java.lang.System.*;

 

public class Demo{

  public static void main(String[] args) {

      SataHdd sh1=new SeagateHdd(); //初始化希捷硬盤

      SataHdd sh2=new SamsungHdd(); //初始化三星硬盤

  }

}

//串行硬盤接口

interface SataHdd{

    //連接線的數量

    public static final int CONNECT_LINE=4;

    //寫數據

    public void writeData(String data);

    //讀數據

    public String readData();

}

// 維修硬盤接口

interface fixHdd{

    // 維修地址

    String address = "北京市海淀區";

    // 開始維修

    boolean doFix();

}

//希捷硬盤

class SeagateHdd implements SataHdd, fixHdd{

    //希捷硬盤讀取數據

    public String readData(){

        return "數據";

    }

    //希捷硬盤寫入數據

    public void writeData(String data) {

        out.println("寫入成功");

    }

    // 維修希捷硬盤

    public boolean doFix(){

        return true;

    }

}

//三星硬盤

class SamsungHdd implements SataHdd{

    //三星硬盤讀取數據

    public String readData(){

        return "數據";

    }

    //三星硬盤寫入數據

    public void writeData(String data){

        out.println("寫入成功");

    }

}

//某劣質硬盤,不能寫數據

abstract class XXHdd implements SataHdd{

    //硬盤讀取數據

    public String readData() {

        return "數據";

    }

}

接口作為類型使用

接口作為引用類型來使用,任何實現該接口的類的實例都可以存儲在該接口類型的變量中,通過這些變量可以訪問類中所實現的接口中的方法,Java 運行時系統會動態地確定應該使用哪個類中的方法,實際上是調用相應的實現類的方法。

示例如下:

public class Demo{

    public void test1(A a) {

        a.doSth();

    }

    public static void main(String[] args) {

        Demo d = new Demo();

        A a = new B();

        d.test1(a);

    }

}

interface A {

    public int doSth();

}

class B implements A {

    public int doSth() {

        System.out.println("now in B");

        return 123;

    }

}

運行結果:

now in B

大家看到接口可以作為一個類型來使用,把接口作為方法的參數和返回類型。

頂一下
(0)
0%
踩一下
(0)
0%
------分隔線----------------------------
------分隔線----------------------------
Java教程
1、Java 概述
1.1 Java語言概述
1.2 Java虛擬機以及跨平臺原理
1.3 Java的主要就業方向
1.4 Java的不同版本
1.5 Java開發環境搭建
1.6 第一個Java程序示例
1.7 Java類和對象的概念
1.8 Java類庫及其組織結構
1.9 Java import
2、Java 語法基礎
2.1 Java數據類型以及變量的定義
2.2 Java數據類型轉換
2.3 Java運算符
2.4 Java流程控制
2.5 Java數組的定義和使用
2.6 Java字符串(String)
2.7 Java StringBuffer與StringBuider
2.8 強調一下編程風格
3、Java 類與對象
3.1 Java類的定義及其實例化
3.2 Java訪問修飾符
3.3 Java變量的作用域
3.4 Java this關鍵字詳解
3.5 Java方法重載
3.6 Java類的基本運行順序
3.7 Java包裝類、拆箱和裝箱詳解
3.8 再談Java包
3.9 源文件的聲明規則
4、Java 繼承和多態
4.1 繼承的概念與實現
4.2 Java super關鍵字
4.3 繼承中的方法的覆蓋和重載
4.4 多態和動態綁定
4.5 instanceof 運算符
4.6 多態對象的類型轉換
4.7 Java static關鍵字
4.8 Java final關鍵字
4.9 Java Object類
5、面向對象高級特性
5.1 Java內部類及其實例化
5.2 內部類的分類
5.3 抽象類的概念和使用
5.4 接口的概念和使用
5.5 接口和抽象類的區別
5.6 Java 泛型
5.7 泛型通配符和類型參數的范圍
6、異常處理
6.1 異常處理基礎
6.2 異常類型Java語言中常見的異常類型有哪些
6.3 未被捕獲的異常
6.4 try和catch的使用
6.5 多重catch語句的使用
6.6 try語句的嵌套
6.7 throw:異常的拋出
6.8 throws子句
6.9 finally塊
6.10 Java的內置異常
6.11 創建自己的異常子類
6.12 斷言
7、線程編程
7.1 線程的概念
7.2 Java線程模型
7.3 主線程
7.4 創建線程
7.5 創建多線程
7.6 isAlive()和join()的使用
7.7 線程優先級
7.8 線程同步
7.9 線程間通信
7.10 線程死鎖
7.11 線程的掛起、恢復和終止
8、輸入輸出(IO)操作
8.1 輸入輸出基本概念
8.2 面向字符的輸入流
8.3 面向字符的輸出流
8.4 面向字節的輸入輸出流
8.5 面向字節流的應用
8.6 文件與目錄管理
8.7 文件的隨機讀寫
8.8 文件的壓縮處理
9、常用類庫、向量與哈希
9.1 Java基礎類庫
9.2 Object類
9.3 Java語言包(java.lang)簡介
9.4 日期和時間類
9.5 向量及其應用
9.6 哈希表及其應用
10、圖形界面(GUI)設計
10.1 圖形界面設計基礎
10.2 框架窗口
10.3 標簽、按鈕和按鈕事件
10.4 面板
10.5 布局設計
10.6 文本框和文本區
10.7 文本框和文本區的輸入輸出
10.8 選擇框和單選按鈕
10.9 列表和組合框
10.10 菜單
10.11 對話框
10.12 滾動條
10.13 鼠標事件
10.14 鍵盤事件
11、圖形、圖像與多媒體
11.1 繪圖基礎
11.2 設置字型和顏色
11.3 繪圖模式
11.4 Graphics類的繪圖方法
11.5 Graphics2D類的繪圖方法
11.6 圖像處理基礎
11.7 圖像緩沖技術
11.8 多媒體基礎
12、網絡與數據庫編程
12.1 IP地址和InetAddress類
12.2 統一資源定位符
12.3 套接字(Socket)
12.4 數據庫連接
12.5 幾個重要的類和接口
12.6 數據庫查詢
12.7 數據庫更新
12.8 插入記錄
12.9 修改記錄
12.10 刪除記錄
五月情天