JAVA-基礎-介面

來源:互聯網
上載者:User

標籤:介面   重要   oid   實現   修飾符   功能   動作類   弊端   區別   

     介面

介面是功能的集合,同樣可看做是一種資料類型,是比抽象類別更為抽象的”類”。

介面只描述所應該具備的方法,並沒有具體實現,具體的實現由介面的實作類別(相當於介面的子類)來完成。這樣將功能的定義與實現分離,最佳化了程式設計。

一切事物均有功能,即一切事物均有介面。

     介面的定義:

與定義類的class不同,介面定義時需要使用interface關鍵字。

定義介面所在的仍為.java檔案,雖然聲明時使用的為interface關鍵字的編譯後仍然會產生.class檔案。這點可以讓我們將介面看做是一種只包含了功能聲明的特殊類。

定義格式:

public interface 介面名 {

抽象方法1;

抽象方法2;

抽象方法3;

}

使用interface代替了原來的class,其他步驟與定義類相同:

l  介面中的方法均為公用訪問的抽象方法

l  介面中無法定義普通的成員變數

    類實現介面

類與介面的關係為實現關係,即類實現介面。實現的動作類似繼承,只是關鍵字不同,實現使用implements。

其他類(實作類別)實現介面後,就相當於聲明:”我應該具備這個介面中的功能”。實作類別仍然需要重寫方法以實現具體的功能。

格式:

class 類 implements 介面 {

    重寫介面中方法

}

在類實現介面後,該類就會將介面中的抽象方法繼承過來,此時該類需要重寫該抽象方法,完成具體的邏輯。

l  介面中定義功能,當需要具有該功能時,可以讓類實現該介面,只聲明了應該具備該方法,是功能的聲明。

l  在具體實作類別中重寫方法,實現功能,是方法的具體實現。

於是,通過以上兩個動作將功能的聲明與實現便分開了。(此時請重新思考:類是現實事物的描述,介面是功能的集合。)

 

介面中成員的特點:

 

1、介面中可以定義變數,但是變數必須有固定的修飾符修飾,public static final 所以介面中的變數也稱之為常量,其值不能改變。後面我們會講解static與final關鍵字

 

2、介面中可以定義方法,方法也有固定的修飾符,public abstract

 

3、介面不可以建立對象。

 

4、子類必須覆蓋掉介面中所有的抽象方法後,子類才可以執行個體化。否則子類是一個抽象類別。

interface Demo { ///定義一個名稱為Demo的介面。    public static final int NUM = 3;// NUM的值不能改變    public abstract void show1();    public abstract void show2();}//定義子類去覆蓋介面中的方法。類與介面之間的關係是 實現。通過 關鍵字 implementsclass DemoImpl implements Demo { //子類實現Demo介面。    //重寫介面中的方法。    public void show1(){}    public void show2(){}}
  介面的多實現

介面最重要的體現:解決多繼承的弊端。將多繼承這種機制在java中通過多實現完成了。

interface Fu1{    void show1();}interface Fu2{    void show2();}class Zi implements Fu1,Fu2// 多實現。同時實現多個介面。{    public void show1(){}    public void show2(){}}

怎麼解決多繼承的弊端呢?

弊端:多繼承時,當多個父類中有相同功能時,子類調用會產生不確定性。

其實核心原因就是在於多繼承父類中功能有主體,而導致調用運行時,不確定運行哪個主體內容。

為什麼多實現能解決了呢?

因為介面中的功能都沒有方法體,由子類來明確。

 類繼承類同時實現介面

當一個類已經繼承了一個父類,它又需要擴充額外的功能,這時介面就派上用場了。

子類通過繼承父類擴充功能,通過繼承擴充的功能都是子類應該具備的基礎功能。如果子類想要繼續擴充其他類中的功能呢?這時通過實現介面來完成。

class Fu {    public void show(){}}interface Inter {    pulbic abstract void show1();}class Zi extends Fu implements Inter {    public void show1() {    }}

介面的出現避免了單繼承的局限性。父類中定義的事物的準系統。介面中定義的事物的擴充功能。

   介面的多繼承

多個介面之間可以使用extends進行繼承。

interface Fu1{    void show();}interface Fu2{    void show1();}interface Fu3{    void show2();}interface Zi extends Fu1,Fu2,Fu3{    void show3();}

在開發中如果多個介面中存在相同方法,這時若有個類實現了這些介面,那麼就要實現介面中的方法,由於介面中的方法是抽象方法,子類實現後也不會發生調用的不確定性。

介面的好處:

介面的出現事項了擴充功能

介面的出現降低了耦合性,即裝置與裝置之間事項瞭解耦.

介面的出現方便後期的使用和維護,介面實際是一種暴露出來的規則.

介面和抽象的特點:

都位於繼承的頂端,用於被其他類實現或繼承

都不能直接執行個體化對象

都包含抽象方法,其子類都必須重寫這些抽象方法.

區別:

抽象類別為部分方法提供實現,避免子類重複實現這些方法,提高代碼重用性,介面只包含抽象方法.

一個類只能繼承一個直接父類(可能是抽象類別)卻可以實現多個介面,避免了java的單繼承

抽象類別是這個事物中應該具備的內容,繼承體系是is...a的關係

介面是這個事物額外內容,繼承體系是like...a的關係

二者的選用:

優先選用介面,少用抽象類別

需要定義子類的行為又要為子類提供共性功能時才用抽象類別.

JAVA-基礎-介面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.