有了繼承,爲什麼要定義接口

我是個初學者,剛開始的時候,學習java有這樣的一種困惑,就是接口是用來幹什麼的,爲什麼有了繼承,還要定義接口進行繼承,不是多此一舉嗎。

後來看了一些資料,懂了一些

現具體功能時,接口和實現的類分離。接口定義爲XxxService,實現爲XxxServiceImpl。

接口提供了一個公用的方法提供方。 接口是用來規定子類的行爲的。

面向接口編程的好處:

 

1.根據客戶提出的需求提出來,作爲接口的;業務具體實現是通過實現接口類來完成的。

2.當客戶提出新的需求時,只需編寫該需求業務邏輯新的實現類。

3.假如採用了這種模式,業務邏輯更加清晰,增強代碼可讀性,擴展性,可維護性。

4.接口和實現分離,適合團隊協作開發。

5.實現鬆散耦合的系統,便於以後升級,擴展。

耦合

個人覺得就是因爲耦合的緣故,所以延伸出接口這一個概念。

接下來引用一個博主的典型示例https://blog.csdn.net/qq_24886697/article/details/78580509

通俗的講,就是爲了降低耦合度。 

一個很搞笑的例子: 
看看下面的程序: 一個學校裏邊,有兩種人:學生、老師。他們都要吃飯和睡覺。 
------------------------------ 
public interface 人{ 
    void 吃飯();
    void 睡覺(); } 

public class 學生 implements 人{ 
    public void 吃飯(){ 
        //去食堂吃飯 } 

    public void 睡覺(){ 
        //回寢室睡覺 } 
    //其他特有方法,比如泡妞、打遊戲 } 

public class 老師 implements 人{ 
    public void 吃飯(){ 
        //回家吃飯 } 

    public void 睡覺(){ 
        //回家睡覺 } 

    //其它特有方法,比如爲生兒育女傳宗接代的歷史使命努力等不足爲外人道的事情 } 

public class 學校{ 
    public void 開飯(人 ren){ 
    ren.吃飯(); } 

    public void 放學(人 ren){ 
    ren.睡覺(); } } 

----------------------------- 
這裏就用到了里氏代換原則,"開飯()"和"放學()"的參數都是人,那麼這個地方如果換成學生和老師肯定也可以。 
   人 a = new 學生(); 
     學校.開飯(a); 學校.放學(a); 
這樣執行的結果就是學生回寢室吃飯。 

  人 b = new 老師(); 
    學校.開飯(b); 學校.放學(b); 
這樣執行的結果就是老師回家吃飯。 

爲什麼要這樣寫呢?這樣寫有什麼好處呢? 我在開飯的時候完全可以直接調用"學生.吃飯();"、"老師.吃飯();"啊。 接着看。 有一天,學校裏來了第三種人,家長。 家長既不是去寢室睡覺也不是回家睡覺,而是旅館睡覺,既不是去食堂吃飯也不是回家吃飯,而是去下館子。 這個時候學校這個系統該怎麼處理呢? 如果原來沒有定義"人"這個接口那就麻煩啦,所有用到人的地方代碼都要改。 現在不一樣了,我可以直接定義一個類:家長,這個類實現人這個接口就可以了。 

好,看代碼: 
------------------------------ 
public class 家長 implements 人{ 
    public void 吃飯(){ 
        //下館子 } 

    public void 睡覺(){ 
        //去旅館睡覺 } 

    //其它特有方法,比如會見老師,曉之以錢,動之以利等等,不一而足 } 
------------------------------- 

在調用的時候不需要修改任何代碼,還和原來一樣: 
    人 c=new 家長(); 
       學校.開飯(c); 
       學校.放學(c); 
輕鬆搞定家長的食宿問題! 

這樣一來學校來再多的客人都沒關係啊,絕對可以應付自如,這也就是傳說中的可擴展性! 不知道初學者看到這裏是不是能夠明白接口的作用。如果你還不明白,那麼你把人這個接口去掉,自己寫一個學校開飯和放學的類,然後再加一個家長這個新新人類進去,看看你的代碼是什麼樣子的,再想一下在人口這麼多的中國,萬一哪天你的學校裏來了成千上萬個新新人類你該怎麼辦! 先聲明一下,這個案例可不是我想出來的~~ 然後我們就很好理解了,爲什麼用別人的東西要實現接口呢?很直接的一個原因是這樣一來,編程的複雜度就可能會大大降低了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章