国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

php接口類與抽象類的實際作用,抽象類與接口的區別

2020-03-22 18:27:23
字體:
來源:轉載
供稿:網友
  • 今天我看到一個關于程序員的基本能力要知道:抽象、多態、接口、異常處理的能力。

    于是就看了一下抽象與接口

    接口:

    接口中只能聲明抽象方法(包括靜態抽象方法)和靜態變量:

    1. 定義抽象方法時不能加 abstract 關鍵字,因為默認隱式就是抽象的.

    2. 不能加 final 關鍵字來防止接口中方法的繼承.

    3. 接口中的方法默認是 html' target='_blank'>public 的,不能用 protected 和 private 修飾符修飾.

    4. 接口內定義的方法成員不能在接口中實現.

    接口中一般不考慮屬性,只考慮方法,使得子類可以自由的填補和擴充接口中說定義的方法,也就是說接口偏重于行為.

    一個子類要實現一個接口,如果該子類是非抽象類就必須實現接口中所有定義的方法(不管是否需要);如果該子類是一個抽象類,則可以實現接口中的方法,也可以不實現.接口也有一個顯而易見的缺點就是,如果接口中的方法名改變了,那么所有實現此接口的子類將無法通過編譯,因為他們說實現的方法名已經不存在了.

    接口還有一個優點就是能夠同時實現多個接口.

    接口可以這樣理解:它并不僅僅是一個類,而更是一個規范.

    每一個應用程序作為一個系統,不斷有舊的成員被新的成員取代,但系統仍然可以正常運行,為什么?就是因為所有的成員都遵守一個讓系統正常運行的規范,在這樣一個系統中接口就扮演著這樣一個角色,它沒有代替成員做具體的工作,而是告訴成員如何去做(接口中的方法).這就是接口最主要的作用,通過接口耦合的系統有更好的整體性,可維護性和可擴展性.正因為有這樣的作用,使得接口一旦發布,就不能更改,而只能通過定義新的接口來增加功能,

    抽象類:

    抽象類不但包含了一般類的特點,即包括屬性和方法外,還可以聲明抽象方法(包括靜態抽象方法).

    1. 抽象方法前必須加上 abstract 關鍵字,表示聲明為抽象方法.

    2. 可以加 final 關鍵字來防止抽象類中的普通方法被繼承.

    3. 抽象類中的方法可以用 public , protected 和 private 修飾符修飾,具有普通類方法的效果.

    抽象類一般作為公共的父類為子類的擴展提供基礎(這里的擴展包括了屬性上的和行為上的),而如果繼承一個抽象類,只需要實現其中的抽象方法,這是抽象類的一個優點.

    抽象類如果修改了自身的某一個抽象方法,子類同樣也編譯不過,因為此時子類沒有實現新的抽象方法,但若修改的是抽象類中的非抽象方法,則并不影響子類的編譯,就相當于子類多了一個方法.也就是說可以抽象類中可以任意增加和修改非抽象類而不會影響子類的編譯.www.it165.net

    抽象類還有一個缺點,就是一個子類只能有一個父類,即如果 A extends B ,A就擁有了B中的所有方法,但是如果A還想擁有C中的方法,就不能通過 A extends C 的方式來實現.

    總結:

    在許多情況下,如果你不用刻意表達屬性上的繼承的話,接口和抽象類是可以相互替代的.

    接口和抽象類的作用從本質上是一樣的,就是規定一些共同的方法.只要某個類是繼承自某個抽象類或者實現了多個接口,則其必須完全實現接口和抽象類中的所有抽象方法.之所以兩者可以共存,是因為只支持單一類繼承,但可以實現多個接口以實現類似多重繼承的功能.

    實例:

    1.php 接口類:interface
    其實他們的作用很簡單,當有很多人一起開發一個項目時,可能都會去調用別人寫的一些類,那你就會問,我怎么知道他的某個功能的實現方法是怎么命名的呢,這個時候php接口類就起到作用了,當我們定義了一個接口類時,它里面的方式是下面的子類必須實現的,比如 :

    interface Shop
    {
    public function buy($gid);
    public function sell($gid);
    public function view($gid);
    }

    我聲明一個shop接口類,定義了三個方法:買(buy),賣(sell),看(view),那么繼承此類的所有子類都必須實現這3個方法少一個都不行,如果子類沒有實現這些話,就無法運行。實際上接口類說白了,就是一個類的模板,一個類的規定,如果你屬于這類,你就必須遵循我的規定,少一個都不行,但是具體你怎么去做,我不管,那是你的事,如:

    class BaseShop implements Shop
    {
    public function buy($gid)
    {
    echo('你購買了ID為 :'.$gid.'的商品');
    }
    public function sell($gid)
    {
    echo('你賣了ID為 :'.$gid.'的商品');
    }
    public function view($gid)
    {
    echo('你查看了ID為 :'.$gid.'的商品');
    }
    }

    你想想,在一個多人合作的大項目里面,有了接口類是多么的方便,這樣你就不用去問別人,你的某某功能的方法名是什么了,當然如果你們喜歡這樣我也沒有辦法。
    結論 : 接口類就是一個類的領導者,指明方向,子類必須完成它指定方法。
    2.php 抽象類 : abstract
    其實抽象類和接口類有一部分很像,記得在哪里看見這樣一句話,抽象類就把類像的部分抽出來,這句看上去很搞笑,其實它說出了抽象類的真理,抽象類的作用是,當你發現你的很多類里面用很多方法你不斷的在重復寫,那你就可以考慮使用抽象類了,你可能會說“我不是可以重寫一個類每個公共類我個實例化一個這個公共類,調用相同的方法就可以了”,這里是可以,實際上抽象類做的工作也就是這個,不過他省去了你實例化的這個步驟,讓你就像直接調用本類方法一樣方便,而且你還可以重載這個方法。如:


    abstract class BaseShop
    {
    public function buy($gid)
    {
    echo('你購買了ID為 :'.$gid.'的商品');
    }
    public function sell($gid)
    {
    echo('你賣了ID為 :'.$gid.'的商品');
    }
    public function view($gid)
    {
    echo('你查看了ID為 :'.$gid.'的商品');
    }
    }
    class BallShop extends BaseShop
    {
    var $itme_id = null;
    public function __construct()
    {
    $this->itme_id = 2314;
    }
    public function open()
    {
    $this->sell($this->itme_id);
    }
    }

    這里是一個例子,想上面一樣我定義了一個商店類,抽出了它所有像的部分,買(buy),賣(sell),看(view),并且抽象類里都實現了這些方法,那么繼承它的子類就自動獲得了這些方法,子類就做它自己獨特的東西,介紹代碼的重復,提高復用性。
    結論: 抽象類就是一個類的服務提供商,擁有眾多服務,你不用必須用,當需要的時候你來用就可以,如果你覺得不提供服務不滿意,你還可以自己來做。


    PHP編程

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 正定县| 鹰潭市| 新营市| 介休市| 泰来县| 杭锦旗| 麻江县| 鸡西市| 兰考县| 菏泽市| 濉溪县| 尉氏县| 阜南县| 太康县| 荣成市| 黑龙江省| 宣化县| 斗六市| 溧水县| 天津市| 香格里拉县| 波密县| 黄浦区| 潍坊市| 德昌县| 和平区| 大兴区| 云和县| 炎陵县| 广丰县| 资溪县| 金坛市| 忻州市| 咸阳市| 广宁县| 体育| 长白| 永和县| 四子王旗| 闸北区| 神池县|