208.Java_接口

1.簡介

接口做用編程

爲何須要接口?接口和抽象類的區別?設計模式

接口就是比「抽象類」還「抽象」的「抽象類」,能夠更加規範的對子類進行約束。全面地專業地實現了:規範和具體實現的分離。工具

抽象類還提供某些具體實現,接口不提供任何實現,接口中全部方法都是抽象方法。接口是徹底面向規範的,規定了一批類具備的公共方法規範。post

從接口的實現者角度看,接口定義了能夠向外部提供的服務。spa

從接口的調用者角度看,接口定義了實現者能提供那些服務。設計

接口是兩個模塊之間通訊的標準,通訊的規範。若是能把你要設計的模塊之間的接口定義好,就至關於完成了系統的設計大綱,剩下的就是添磚加瓦的具體實現了。你們在工做之後,作系統時每每就是使用「面向接口」的思想來設計系統。3d

接口和實現類不是父子關係,是實現規則的關係。好比:我定義一個接口Runnable,Car實現它就能在地上跑,Train實現它也能在地上跑,飛機實現它也能在地上跑。就是說,若是它是交通工具,就必定能跑,可是必定要實現Runnable接口。code

接口的本質探討對象

接口就是規範,定義的是一組規則,體現了現實世界中「若是你是…則必須能…」的思想。若是你是天使,則必須能飛。若是你是汽車,則必須能跑。若是你是好人,則必須能幹掉壞人;若是你是壞人,則必須欺負好人。blog

接口的本質是契約,就像咱們人間的法律同樣。制定好後你們都遵照。

面向對象的精髓,是對對象的抽象,最能體現這一點的就是接口。爲何咱們討論設計模式都只針對具有了抽象能力的語言(好比C++、Java、C#等),就是由於設計模式所研究的,實際上就是如何合理的去抽象。

區別

1. 普通類:具體實現

2. 抽象類:具體實現,規範(抽象方法)

3. 接口:規範

 

2.定義

2.1聲明格式

[訪問修飾符]  interface 接口名   [extends  父接口1,父接口2…]  {
常量定義;  
方法定義;
}

定義接口的詳細說明:

1. 訪問修飾符:只能是public或默認。

2. 接口名:和類名採用相同命名機制。

3. extends:接口能夠多繼承。

4. 常量:接口中的屬性只能是常量,老是:public static final 修飾。不寫也是。

5. 方法:接口中的方法只能是:public abstract。 省略的話,也是public abstract。

 

 

3.使用

1. 子類經過implements來實現接口中的規範。

2. 接口不能建立實例,可是可用於聲明引用變量類型。

3. 一個類實現了接口,必須實現接口中全部的方法,而且這些方法只能是public的。

4. JDK1.7以前,接口中只能包含靜態常量、抽象方法,不能有普通屬性、構造方法、普通方法。

5. JDK1.8後,接口中包含普通的靜態方法。

//接口的使用
public class TestInterface {
    public static void main(String[] args) {
        Volant volant = new Angel();
        volant.fly();
        System.out.println(Volant.FLY_HIGHT);
         
        Honest honest = new GoodMan();
        honest.helpOther();
    }
}
/**飛行接口*/
interface Volant { 
    int FLY_HIGHT = 100;  // 老是:public static final類型的;
    void fly();   //老是:public abstract void fly();
}
/**善良接口*/
interface Honest { 
    void helpOther();
}
/**Angle類實現飛行接口和藹良接口*/
class Angel implements Volant, Honest{
    public void fly() {
        System.out.println("我是天使,飛起來啦!");
    }
    public void helpOther() {
        System.out.println("扶老奶奶過馬路!");
    }
}
class GoodMan implements Honest {
   public void helpOther() {
        System.out.println("扶老奶奶過馬路!");
    }  
}
class BirdMan implements Volant {
    public void fly() {
        System.out.println("我是鳥人,正在飛!");
    }
}

 

4.特色

4.1接口的多繼承

接口徹底支持多繼承。和類的繼承相似,子接口擴展某個父接口,將會得到父接口中所定義的一切。

//接口的多繼承
interface A {
    void testa();
}
interface B {
    void testb();
}
/**接口能夠多繼承:接口C繼承接口A和B*/
interface C extends A, B {
    void testc();
}
public class Test implements C {
    public void testc() {
    }
    public void testa() {
    }
    public void testb() {
    }
}

 

 

面向接口編程是面向對象編程的一部分。

爲何須要面向接口編程? 軟件設計中最難處理的就是需求的複雜變化,需求的變化更多的體如今具體實現上。咱們的編程若是圍繞具體實現來展開就會陷入」複雜變化」的汪洋大海中,軟件也就不能最終實現。咱們必須圍繞某種穩定的東西開展,才能以靜制動,實現規範的高質量的項目。

接口就是規範,就是項目中最穩定的東東! 面向接口編程可讓咱們把握住真正核心的東西,使實現複雜多變的需求成爲可能。

經過面向接口編程,而不是面向實現類編程,能夠大大下降程序模塊間的耦合性,提升整個系統的可擴展性和和可維護性。

面向接口編程的概念比接口自己的概念要大得多。設計階段相對比較困難,在你沒有寫實現時就要想好接口,接口一變就亂套了,因此設計要比實現難。

 

 

 

相關文章
相關標籤/搜索